相关疑难解决方法(0)

vector :: resize()和vector :: reserve()之间的选择

我正在为我的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.

c++ vector

142
推荐指数
2
解决办法
13万
查看次数

C++:结构向量向量的问题

我需要一个可变大小的二维矩阵,其中每个元素都是一个结构.行数在编译时是已知的,永远不会更改.每行的列数不同.我用矢量向量实现了这个,但我不知道我是否做得对:

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()是我遇到问题的原因.如果我已经知道了,那么我就已经足够了解自己解决问题了.

c++

1
推荐指数
1
解决办法
272
查看次数

标签 统计

c++ ×2

vector ×1