Dav*_*ili 2 c++ algorithm for-loop vector c++11
我目前正在学习 STL,并且正在学习映射、过滤等主题。我最近学习了很多新东西,例如新的 c++11 for loop(with auto) 我(有点)不明白事情的工作方式,但我想使用“转换”功能来填充另一个向量(映射主题)。但是在我构建程序并运行它之后,它给了我一个错误,它是:“无法寻找值初始化的向量迭代器”
我不确定这意味着什么或有什么错误,你们能帮我理解 for 循环概念以及我在这里做错了什么吗?
ps“转换”的操作符最终是用教程中的 lambda 东西(我仍然需要学习并且不知道)完成的,我尝试制作一个函数并猜测它会起作用。
int mult(int a) {
return a * 10;
}
int main() {
vector<int> v{ 1,2,3,4,5 };
vector<int> v1;
for (auto& i : v) {
cout << i << endl;
}
if (v1.empty()) cout << "v1 is empty" << endl;
cout << "v1" << endl;
transform(v.begin(), v.end(), v1.begin(), mult);
for (auto &i : v1) {
cout << i << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
transform不会扩展范围,它只会写入假定为非空的现有范围。v1为空,因此无法存储转换的结果。您的选择是确保v1拥有足够的元素供算法覆盖:
vector<int> v1(v.size());
Run Code Online (Sandbox Code Playgroud)
或用于std::back_inserter创建一个迭代器来增加 的大小v1:
transform(v.begin(), v.end(), back_inserter(v1), mult);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |