C++ vector 中 vector 的动态分配?

标签 c++ stl

我现在正在使用 vector,我有一个有趣的情况需要我帮忙。

我有一个 vector 的 vector ,定义如下:

vector< vector<int> > list;

我正在使用 cin >> helpVar; 从标准输入加载数字,每次当我得到 0(零)时,我想创建新的整数 vector ,它将被放入这个“主容器” "列表

当然我不知道,零数字会出现多少次 - 这取决于用户。所以我也不知道,程序会添加多少 vector 。

但我不知道,具体怎么做。如果我使用 C# 或其他类似垃圾收集的语言,我可能会这样写:

if(helpVar == 0)
{
   list.push_back(new vector<int>);
}

但是这种构造在 C++ 中不起作用。

所以我的问题是,我应该如何处理这种情况才能使其发挥作用?还是我只是想错了,应该换一种方式来做?

感谢您的回答。

最佳答案

list.push_back(vector<int>());

vector<int>()创建临时 vector<int>对象并对其进行初始化(即调用该对象的默认构造函数)。 push_back然后将该临时对象复制到 list .

在 C#(和“其他垃圾收集语言”)中,new用于创建新对象,其生命周期由垃圾收集器控制。

在 C++ 中,new仅用于动态分配对象(并且您负责通过使用智能指针来管理其生命周期)。语法 T() (其中 T 是类型的名称)用于创建临时对象。

关于C++ vector 中 vector 的动态分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126115/

相关文章:

c++ - bad_alloc 在通过右值和对象有效性插入对象时

c++ - 使仿函数成为类成员函数时出现编译错误

c++ - 为什么gcc从这里的回调函数的最后一个参数推断类型?

c++ - 我的 C++ 程序在计算欧拉数的级数时遇到问题

c++ - 与其他几个具有相同输入的编译器相比,在 Xcode 中编译的代码给出了不正确的(?)输入

c++ - 使用 std::shared_ptr<std::vector> 而不是 boost::shared_array 有意义吗?

c++ - 将类型添加到 std 命名空间

c++ - 我可以在 C++ 中使用具有值语义的多态容器吗?

c++ - 什么是 std::__scan_keyword?

c++ - 别名 const 重载函数的返回类型