我希望用vector填充一些数据,这些数据在运行时是已知的,但元素是以(索引、值)对的形式而不是原始顺序出现的。这些索引保证是唯一的(每个从0到n-1的索引恰好出现一次),因此我想按以下方式存储它们:
vector<Foo> myVector;
myVector.reserve(n); //total size of data is known
myVector[i_0] = v_0; //data v_0 goes at index i_0 (not necessarily 0)
...
myVector[i_n_minus_1] = v_n_minus_1;
这看起来大部分情况下都可以正常工作;在代码的末尾,所有的 n 个元素都在向量中安置到了正确的位置。然而,某些向量函数并不完全像预期的那样工作:
...
cout << myVector.size(); //prints 0, not n!
对我来说,像 size()
这样的函数仍然很重要--例如,我可能想检查所有元素是否都成功插入,通过检查 size() == n
。我是否初始化了向量错误,如果是,我应该如何处理?
vector.resize
。 - AnycornFoo
是默认可构造的吗?迄今为止,三个解决方案都假定它是默认可构造的。否则,可能需要存储输入值,然后一次性构造所有Foo
。 - MSalters