繁体   English   中英

在c ++向量中push_back与operator []赋值

[英]push_back versus operator[] assignment in c++ vectors

有人可以详细向我解释为什么vectorY的下面代码会进行分配,但VecY的大小为零? 此外,开始和结束迭代器都停留在第一个节点上。 似乎保留仅适用于回退,并且如果您希望向量的迭代器和大小按预期工作,则需要构造具有大小的向量。 我假设push_back正在进行某种类型的分配,在这种情况下直接分配不是吗? 我正在寻找解释这一点的细节,所以我可以确保我理解保留和push_back正在发生什么,而不是使用size元素进行构建,然后像在VecX示例中那样进行赋值。

#include <iostream>
#include <vector>

    int main ( int argc, char *argv[])
    {
      std::vector<int> vecX(2);
      vecX[0] = 1;
      vecX[1] = 2;
      std::cout << " VecX0 Item: " << vecX[0] << std::endl;
      std::cout << " VecX1 Item: " << vecX[1] << std::endl;
      std::cout << " VectorX Size: " << vecX.size() << std::endl;

      std::vector<int> vecY;
      vecY.reserve(2);
      vecY[0] = 1;
      vecY[1] = 2;
      std::cout << " VecY0 Item: " << vecY[0] << std::endl;
      std::cout << " VecY1 Item: " << vecY[1] << std::endl;
      std::cout << " VectorY Size: " << vecY.size() << std::endl;
    }

Output

 VecX0 Item: 1
 VecX1 Item: 2
 VectorX Size: 2
 VecY0 Item: 1
 VecY1 Item: 2
 VectorY Size: 0
std::vector<int> vecY;
      vecY.reserve(2);
      vecY[0] = 1;
      vecY[1] = 2;

此代码错误并唤起未定义行为1 reserve vector ,可以设置capacity ,而不是size

您需要push_back ,或者像在示例1中那样构造vector


Undefined Behavior ”:由于对operator[]的超出范围调用,因此调用Undefined Behavior如果调用vector::operator[n] ,其中n > vec.size() ,则行为为Undefined。

如果您不想使用push_back或构造,请考虑使用resize方法

暂无
暂无

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

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