首页 > 解决方案 > 使用变换填充向量后,新的 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;
    }
}

标签: c++algorithmc++11for-loopvector

解决方案


transform不扩展范围,它仅写入假定非空的现有范围。v1是空的,所以它不能用来存储转换的结果。您的选择是确保v1包含足够的元素以供算法覆盖:

vector<int> v1(v.size());

或用于std::back_inserter创建增加大小的迭代器v1

transform(v.begin(), v.end(), back_inserter(v1), mult);

推荐阅读