我是C++的新手,所以这可能是一个新手问题但是我并不完全清楚如何从内存中清除它.我在网上搜索并看了几个答案,但不知道如何正确执行我想做的事情.
如何在c ++中正确地从内存中清除矢量?谢谢,如果这是一个重复的帖子,我道歉.
vector<ElementData> Elements;
Run Code Online (Sandbox Code Playgroud)
如下面的评论所述,我想返回使用的内存.
除了它不会向系统返回任何内存,因为容量保持不变.
Nat*_*ica 12
如果你想重置向量回到空状态,那么我们可以使用这个swap技巧将向量的内容交换成一个临时的,它会被破坏并释放内存
vector<ElementData> Elements
// fill the vector up
vector<ElementData>().swap(Elements);
Run Code Online (Sandbox Code Playgroud)
这将创建一个临时空向量,将其与您拥有的向量交换,现在它为空,然后销毁临时向量中的所有内容.
你可以看到它在这个小例子中工作
int main() {
std::vector<int> foo(500);
std::cout << foo.capacity() << std::endl;
std::vector<int>().swap(foo);
std::cout << foo.capacity() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*erg 11
std::vector 变量通常在超出范围时自动销毁,或者当它们所属的类对象被销毁时。std::vector 的析构函数也会破坏向量中的所有元素。
要明确地完全清除向量,首先清除向量(销毁元素)
v.clear()
Run Code Online (Sandbox Code Playgroud)
然后返回之前为向量元素保留的内存
v.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)
http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit
仅shrink_to_fit当向量之前包含的元素可能比您要填充的元素多得多时才调用。
| 归档时间: |
|
| 查看次数: |
16591 次 |
| 最近记录: |