我正在为我的vector成员变量预先分配一些内存.下面的代码是最小的部分
class A {
vector<string> t_Names;
public:
A () : t_Names(1000) {}
};
Run Code Online (Sandbox Code Playgroud)
现在在某个时间点,如果t_Names.size()等于1000.我打算增加规模100.然后如果它到达1100,再增加100等等.
我的问题是,在vector::resize()和之间做出选择vector::reserve().在这种情况下还有更好的选择吗?
编辑:我有一些精确的估计t_Names.我估计它要700到了800.然而,在某些(很少)情况下,它可以增长超过1000.
我需要一个可变大小的二维矩阵,其中每个元素都是一个结构.行数在编译时是已知的,永远不会更改.每行的列数不同.我用矢量向量实现了这个,但我不知道我是否做得对:
struct MyStruct {
int a, b;
MyStruct(int arg_a, int arg_b) { a = arg_a; b = arg_b; };
};
int main(void) {
vector < vector< MyStruct > > myVVOfStructs;
myVVOfStructs.reserve(10); // Intended to reserve 10 rows of variable size vectors
vector< MyStruct > tmpVector = myVVOfStructs[5];
tmpVector.push_back(MyStruct(10, 20));
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?当我把它放在一个C++文件中时,上面的代码片段就可以工作了.但是,在我更大的C++程序中,上面的消息失败了
terminate called after throwing an instance of 'std::bad_alloc'
Run Code Online (Sandbox Code Playgroud)
所以,我的方式一定存在问题,但它很复杂,因为它在一个简单的C++源文件中工作,但不是在一个更大的更复杂的程序中.有任何想法吗?有没有更好的方法呢?
后期编辑:在另一个题为"我们应该何时使用向量的保留()?"的问题中,对这个问题有一个答案." 问题是,为了找到答案,我必须知道reserve()是问题的原因.就目前而言,我从来没有读过带有该标题的页面,因为我不知道reserve()是我遇到问题的原因.如果我已经知道了,那么我就已经足够了解自己解决问题了.