如何使向量分配新的(而不是更多)内存

时间:2015-05-06 23:13:06

标签: c++ vector

我的代码带有"矩阵"格式为:

vector < vector<int> > matrix;

我不知道她的尺寸:用户将通过cin输入。我想做这样的事情:

vector<int> row;
while (userInputting)
{
    row.push_back(userInput);
    if (rowIsReady)
    {
        // puts the row in the matrix and allocates a new row to be filled
        matrix.push_back(row);
        **row = new vector<int>();**
    }
}

但是,突出显示的行的预期操作非常困难,这在其他语言中通常很简单。我怎么能这样做或类似的东西填补我的矩阵?

2 个答案:

答案 0 :(得分:1)

您无需分配新内存来编写新行。调用matrix.push_back时,其参数是行的副本,而不是行本身。因此,如果您稍后更改row变量,则矩阵的内容不会更改。

答案 1 :(得分:1)

调用clear成员函数或resize( 0 ),再次将其调整为0。

然后你可以使用shrink_to_fit(在C ++ 11及更高版本中)很好地尝试放弃当前的缓冲区,但在你绘制的代码中,这只会导致效率低下,即不必要的动态分配。 / p>

另一种方法是分配一个emtpy向量,例如row = vector<int>(),但这通常与shrink_to_fit具有相同的效果,即当必须再次增加缓冲区大小时,您将获得不必要的动态分配。