【问题标题】:Size of C++ vector is invalidC++ 向量的大小无效
【发布时间】: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[] 只能访问现有元素,它永远不会改变向量的大小。

标签: c++ vector


【解决方案1】:

从您的不可理解的问题中,我可以猜测您希望向量将[] operator 视为“如果存在则编辑或不存在则创建”。例如std::map[] operator 的行为......

你只是不能。它不是这样设计的。

顺便说一句,您可能会这样做:(这是个坏主意。不要。)

int& funky_operator(std::vector<int>& vec, const std::size_t index){
    if(index<vec.size()){
        vec.resize(index+1);
    }
    return vec[index];
}
int main(){
    std::vector<int> intVec;
    intVec.reserve(5);
    funky_operator(intVec,0) = 1;
    std::cout << "intVec Size: " << intVec.size();
}

再一次,这是愚蠢的代码。不要在现实生活中使用。不过,这正是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2021-04-09
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多