c++ - 使用变换填充向量后,新的 c++11 for 循环不起作用
问题描述
我目前正在学习 STL,并且正在研究映射、过滤等主题。我最近学习了很多新东西,例如新的 c++11 for loop(with auto) 我(有点)不明白事情的工作方式,但我想使用“转换”功能来填充另一个向量(映射主题)。但是在我构建程序并运行它之后,它给了我一个错误,如下所示:“无法寻找值初始化的向量迭代器”
我不确定这意味着什么或有什么错误,你们能帮我理解 for 循环的概念以及我在这里做错了什么吗?
ps 最后,“转换”的运算符是在教程中使用 lambda thingy(我仍然需要学习并且不知道)完成的,我尝试制作一个函数并猜测它会起作用。
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;
}
}
解决方案
transform
不扩展范围,它仅写入假定非空的现有范围。v1
是空的,所以它不能用来存储转换的结果。您的选择是确保v1
包含足够的元素以供算法覆盖:
vector<int> v1(v.size());
或用于std::back_inserter
创建增加大小的迭代器v1
:
transform(v.begin(), v.end(), back_inserter(v1), mult);
推荐阅读
- javascript - 使用 Express 和 Sendgrid 发送电子邮件
- python - itertools 排列:int 对象不可迭代
- ruby-on-rails - 在 Ruby 中从 Github 读取私有文件
- python - 使用python直接读写MS Word GUI
- python - 如果条件包含在 Nan(s) 的理解列表中
- javascript - 在 Shiny 模块中包含 JS
- android - 如何在改造调用中设置 url 的静态结尾
- python - 如何从嵌套列表中获取列表并使用 zip 和 map 追加?
- graphql - Graphql上传文件显示为空对象
- python - 如何使用 Python asyncio 在 asyncpg API 上实现同步外观?