【发布时间】:2017-02-15 05:24:58
【问题描述】:
给出以下代码:
#include <vector>
std::vector<int> intVec;
intVec.reserve(5);
intVec[0] = 1;
std::cout << "intVec Size: " << intVec.size();
为什么intVec.size() 返回无效的大小 0?我该如何解决这个问题?我不想改用push_back,也不想用5个元素对向量进行零初始化。
编辑:intVec[0] = 1 之后向量的大小应为 1。
【问题讨论】:
-
reserve 改变容量而不是大小。你的
intVec就像是空罐子.. -
你为什么叫
0“无效”。向量的大小为 0 是完全有效的,特别是如果您既不想将某些东西推入其中,也不想以 0 以外的其他大小对其进行初始化 -
reserve不会改变大小。 我不想改用 push_back,也不想用 5 个元素对向量进行零初始化。你想要什么? -
面面相觑的回答:如果您不想使用
intVec.push_back(x),请改用intVec.insert(intVec.end(), x)。更严重的是:如果您希望它不为空,您需要将向量预初始化为一个大小,或者向其中添加元素。 -
编辑后:这是不可能的。
std::vector::operator[]只能访问现有元素,它永远不会改变向量的大小。