c ++:无序修改和访问"i"

Gen*_*nie 8 c++

我的想法非常简单.我希望将元素从矢量temp复制到矢量数据.

void copy(vector<int> &data, vector<int> &temp)
{    
    int i=0;
    while (i<data.size()) {
    data[i]=temp[i++];//unsequenced modification and access to "i"
    cout<<i<<endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:temp = {1,2,3,4}但数据= {1,1,2,3}即使我的cout值是1,2,3,4

想知道为什么.提前感谢您的帮助!

R S*_*ahu 10

这条线

data[i]=temp[i++];//unsequenced modification and access to "i"
Run Code Online (Sandbox Code Playgroud)

有未定义的行为.执行该行的结果将根据data[i]首先评估还是temp[i++]首先评估而不同.

使用

while (i<data.size()) {
    data[i]=temp[i];
    ++i;
}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,请使用该std::copy功能.

void copy(vector<int> &data, vector<int> &temp)
{
   std::copy(temp.begin(), temp.end(), data.begin());
}
Run Code Online (Sandbox Code Playgroud)

  • 并更改类型和函数原型,然后使用标准库函数. (2认同)