繁体   English   中英

C ++中std :: vector :: operator =的异常行为

[英]Unexpected behavior of std::vector::operator= in C++

我期望与

v2 = v1

v1的内容被复制到v2。

我的经验是,V1的内容被复制到V2如果V1的内容在构造函数中未初始化。

只看代码:

#include <iostream>
#include <vector>

using namespace std;

int main (void) {
  vector<int> v1; // if I use vector<int> v1(10,0); it just works fine
  vector<int> v2;
  v1.reserve(5);
  v2.reserve(5);
  for (int i = 0; i < 5; i++) v1[i] = i*i;
  v2 = v1;
  for (int i = 0; i < 5; i++) {
    cout << "v1[" << i << "] = " << v1[i] << endl;
    cout << "v2[" << i << "] = " << v2[i] << endl;
  }
  return 0;
}

执行的结果是:

v1[0] = 0
v2[0] = 0
v1[1] = 1
v2[1] = 0
v1[2] = 4
v2[2] = 0
v1[3] = 9
v2[3] = 0
v1[4] = 16
v2[4] = 0

为什么会有这种奇怪的行为?

您的期望是正确的。 v2 = v1; v1所有元素复制到v2 问题在于您正在访问矢量。 这是未定义的行为

std::vector::reserve不会增加其大小。 它只是为需要扩展的大小分配更多的存储空间。 您需要调用std::vector::resize ,将向量初始化为正确的大小,或者在循环中调用push_back

请注意,您应该使用size()成员变量, begin()end()迭代器或基于范围的for循环对向量进行迭代。 这样可以确保您不会超出范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM