向量:调整大小()与std:载体:Reserve()

向量:调整大小()与std:载体:Reserve()

中的注释部分中有一个线程。这个职位关于使用std::vector::reserve()v.V.std::vector::resize().

这是原始代码:

void MyClass::my_method(){
    my_member.reserve(n_dim);
    for(int k = 0 ; k < n_dim ; k++ )
         my_member[k] = k ;}

我相信在vector,正确的做法是打电话std::vector::resize(),不是std::vector::reserve().

实际上,在VS 2010 SP1中调试构建中的以下测试代码“崩溃”:

#include <vector>using namespace std;int main(){
    vector<int> v;
    v.reserve(10);
    v[5] = 2;

    return 0;}

我是对的还是我错了?VS2010SP1是对的,还是错的?


慕虎7371278
浏览 371回答 3
3回答

呼如林

有两种不同的方法是有原因的:std::vector::reserve将分配内存,但不会调整矢量的大小,向量的逻辑大小将与以前相同。std::vector::resize将实际修改矢量的大小,并在任何空间中填充处于默认状态的对象。如果它们是INT,它们都是零。在保留之后,在您的情况下,您将需要大量的Push_back才能写入元素5。如果您不希望这样做,那么在您的情况下,您应该使用调整大小。
打开App,查看更多内容
随时随地看视频慕课网APP