我试图弄清楚std::vector<int>用常int量值增加a的所有元素的最佳方法是什么.
换句话说,如果我有一个带元素的向量: 1 2 3 4 5
我想做点什么
vect += 5;
Run Code Online (Sandbox Code Playgroud)
所以元素将是:6 7 8 9 10.
我试图超载,operator +=但事实证明我不知道该怎么做:SI试过这个:
std::vector<int> & operator += (const int & increment) {
for (int &i : *this)
*this[i] = *this[i] + increment;
}
Run Code Online (Sandbox Code Playgroud)
这个编译,但每当我使用它我得到这个错误:
no match for ‘operator+=’ (operand types are ‘std::vector<int>’ and ‘int’)
vec += 3;
^
Run Code Online (Sandbox Code Playgroud)
有什么建议?我想这样做而不是常规increment(vector, value)功能.
谢谢!
正如之前提到的,不要尝试向 中添加新功能std::vector,这是不允许的。该标准规定,您只能打开std::命名空间来专门针对用户定义类型的现有模板代码。std::vector 有运算符+=,而 int 不是用户定义的类型。
所以你不能做你想做的事(即使它在技术上可行),这是不合法的。
相反,使用std::transform或std::for_each
#include <iostream>
#include <vector>
#include <algorithm>
int main(void) {
std::vector<int> v={{1,2,3,4,5}};
std::transform(std::begin(v),std::end(v),std::begin(v),[](int x){return x+5;});
for(auto e :v)
{
std::cout<<e<<std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)