LGD*_*ODV -2 c++ memory runtime std
在一道leetcode题中。当我用来std::vector存放东西的时候。
i_max、 和j_max是整数。
vector<int> left_vec(i_max);
vector<int> right_vec(j_max);
Run Code Online (Sandbox Code Playgroud)
运行时间:100ms,内存使用:71.5MB。
当我用来std::array存放东西的时候。
int left_vec[i_max];
int right_vec[j_max];
Run Code Online (Sandbox Code Playgroud)
运行时间:40ms,内存使用:16.1MB。
代码的其他部分完全相同,唯一的区别是使用向量或数组。
我很困惑为什么会这样。
数组是在堆栈上分配的简单数据序列。
向量是可能在堆上分配的对象。(我不确定所有情况下的情况,我认为这可能取决于 C++ std 库实现和编译器优化,具体取决于您对向量所做的事情。这里和这里有两篇文章。根据经验,认为它是在堆上分配的)。
尽管“技术上不完全准确”并且与我刚才所说的堆栈和堆无关,但您应该拥有一种良好的直觉。
数组非常简单,你给它一个类型和一个大小,这就是你所拥有的一切。您的工作是担心不访问数组边界之外的值,如何以及在何处保存或访问数组中的值,跟踪数组的大小......
另一方面,向量是具有许多功能的完整对象。它为您提供了许多方法来帮助您插入、弹出、读取、检查其大小……这是有代价的。