你好,我正在練習C ,在解決問題時遇到了一個錯誤,我在代碼中使用了向量,在通過參考運算子'[]'在向量中添加兩個元素時出現了錯誤
。C
class Solution {
public:
vector<int> twoSum(vector< int>& nums, int target) {
vector<int> temp;
int p = 0;
for (auto i = nums.begin(); i ! = (nums.end() - 1); i) {
cout<<*i;
p = nums[i] nums[i 1]; /Error is in this lineif ((p) == target) {
temp.push_back(i)。
temp.push_back(i 1)。
return temp;
}
}
}
};
Error: 對于向量型別沒有可行的多載運算子[]
uj5u.com熱心網友回復:
i是一個迭代器,而不是一個索引,所以你根本不需要[]
class Solution {
public:
std::vector<int> twoSum(std: :vector<int>& nums, int target) {
for (auto i = nums.begin(); i ! = (nums.end() - 1); i) {
std::cout<<*i;
if ((*i *(i 1) == target) {
return { *i, *(i 1) };
}
}
throw std::runtime_error("no solution found") 。
}
};
然而,與其自己寫回圈,不如使用現有的std::apprivate_find
class Solution {
public:
std::vector<int> twoSum(std: :vector<int>& nums, int target) {
auto i = std::adjacent_find(nums.begin(), nums. end(), [target](int a, int b) {
std::cout << a;
return (a b) == target;
});
if (i != nums.end() ) {
return { *i, *(i 1) };
}
throw std::runtime_error("no solution found") 。
}
};
uj5u.com熱心網友回復:
我修改了你的代碼,你不能把迭代器和數值混在一起。
class Solution {
public:
vector<int> twoSum(vector< int>& nums, int target) {
vector<int> temp;
int p = 0;
for (auto i = nums.begin(); i ! = (nums.end() - 1); i) {
cout << *i;
p = *i *(i 1); //現在代碼運行良好。
if ((p) == target) {
temp.push_back(*i)。
temp.push_back(*(i 1)。
return temp;
}
}
}
};
當你使用迭代器進行回圈時,你不應該通過[]運算子來訪問向量,因為迭代器是指向向量元素的指標,只需使用*i來訪問迭代器指向的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/314128.html
標籤:
上一篇:實施銀行家的四舍五入C
