c++ - 将一个新 vector 推回一个 vector

标签 c++

我阅读了以下代码片段。

vector<vector<int>> result;
//level is an integer. 
if (level > result.size())
     result.push_back(vector<int>());

我在想: 什么是vector<int>()创建一个对象还是 vector 指针?

我觉得应该是vector对象,而不是vector的指针。否则,它不会编译。

但是,我觉得vector<int>()类似于 new vector<int>() .

也许我错过了什么?

如果您能指出我遗漏的知识点,我将不胜感激。

非常感谢!

最佳答案

这两种情况的相似之处在于它们都提供了一个真实的、对上帝诚实的对象。不同之处在于您访问它的方式和它的生命周期。

vector<int>()使用 Automatic storage duration 在自动存储中创建一个对象.您可以将其视为可以握在数字手中的物体,但只是暂时的。没有关联的标识符它 goes out of scope并在行尾消失,被摧毁。在销毁之前它被复制到 result .使用标识符(例如 vector<int> vec; ),自动变量将持续到标识符到达其范围的末尾。

new vector<int>()使用 Dynamic storage duration 在动态存储中创建一个对象并给你一个指向它的指针。这个对象就在外面的某个地方,你“掌握”的只是关于如何找到它的信息。在这种情况下有几个问题。你注意到第一个,result不会接受指向 vector 的指针.它想要真实的东西。另一个问题是具有动态存储持续时间的对象一直存在,直到它们被手动销毁 delete或过程结束。除非你有一个指向它的指针,否则内存就会丢失,漂浮在空间中,没有你可以用来访问和删除它的绳索。

一般来说,避免new除非你发现一种你无法避免的罕见情况,在这些情况下prefer a smart pointer .

关于c++ - 将一个新 vector 推回一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163029/

相关文章:

c++ - 插入后使用 set::begin() 迭代器

c++ - 在 C++ 中实现一个通用的双链表

c++ - 关于模拟系统调用的建议

c++ - 使用 boost C++ 单元测试套件测试非 fatal error 消息

c++ - std::nth_element 是否保证在存在关系的情况下进行分区?

c++ - 使用 std::accumulate,得到 "too many arguments"错误

c++ - 在从 std::array 派生的类上使用 std::tuple_size

c++ - 虚函数覆盖预期错误

c++ - CUDA中的顺序编程

c++ - 使用结构/遗传算法