给出以下代码:
#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。
答案 0 :(得分:2)
根据你不明智的问题,我猜你希望向量将[] operator
视为“如果存在则编辑,如果不存在则创建”。有些事情比如[] operator
中std::map
的行为,例如..
你只是不能。它不是这样设计的。
顺便说一下,你可能会做这样的事情:(这是个坏主意。不要。)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();
}
同样,这是愚蠢的代码。不要在现实生活中使用。但是,这就是你想要的。