使用变换填充向量后,新的 c++11 for 循环不起作用

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)

Sto*_*ica 5

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)