相关疑难解决方法(0)

调用std :: vector :: clear()会将std :: vector :: capacity()设置为零吗?

如果我在向量上使用.reserve(items),向量将分配足够的内存来猜测我需要的项目数.

如果我以后使用.clear(),那么只清除向量还是保存我之前定义的保留?

谢谢.

c++ stl vector

45
推荐指数
3
解决办法
2万
查看次数

如何缩小std :: vector的大小?

std::vector当我不再需要以前预留的空间时,有没有办法调整容量以降低容量?

c++ stl vector

34
推荐指数
3
解决办法
1万
查看次数

shrink_to_fit是减少`std :: vector`到其大小的容量的正确方法吗?

在C++ 11 shrink_to_fit是引入补充某些STL容器(例如,std::vector,std::deque,std::string).

Synopsizing,其主要功能是请求与之关联的容器,以减少其容量以适应其大小.但是,此请求是非绑定的,并且容器实现可以自由地进行优化,并使向量的容量大于其大小.

此外,在之前的SO问题中,OP不鼓励使用它shrink_to_fit来减小其容量std::vector.不这样做的理由如下:

shrink_to_fit什么都不做,或者它给你缓存局部性问题,并且执行O(n)(因为你必须将每个项目复制到他们新的较小的家庭).通常,将松弛留在内存中会更便宜.@Massa

有人可以如此善意地解决以下问题:

  • 报价中的参数是否成立?
  • 如果是的话,将STL容器的容量缩小到适当大小的正确方法什么(至少对于std::vector).
  • 如果有更好的方法来缩小容器,那么后续存在的原因是什么shrink_to_fit

c++ stl vector c++11

24
推荐指数
2
解决办法
1万
查看次数

内存泄漏(类型)与静态std :: vector

std::vector在课堂上有静态.当我使用微软的内存泄漏检测工具时:

_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );
Run Code Online (Sandbox Code Playgroud)

我将内容插入向量后会报告泄漏.这对我来说很有意义,因为当向量中插入某些内容时会分配新的空间.在程序终止之前,该空间不会被释放(因为向量是静态的).这是正确的吗?

在包含向量的类的析构函数中,我正在删除放入向量的对象.但是,插入时分配的内存仍然存在.反正有没有删除这个空间?

c++ memory memory-leaks stl vector

6
推荐指数
2
解决办法
3167
查看次数

更改C++向量的保留内存

我有一个1000"节点"的矢量

 if(count + 1 > m_listItems.capacity())
     m_listItems.reserve(count + 100);
Run Code Online (Sandbox Code Playgroud)

问题是,当我要重新填充它时,我也清楚了.

m_listItems.clear();
Run Code Online (Sandbox Code Playgroud)

容量不会改变.我用过调整大小(1); 但这似乎并没有改变容量.那么如何改变储备呢?

c++ memory stl resize vector

5
推荐指数
1
解决办法
4585
查看次数

有没有办法只释放 C\C++ 中动态分配数组的一部分(缩小现有数组)?

在一个程序中,我分配一个巨大的多维数组,进行一些数字运算,然后只有该数组的第一部分是进一步感兴趣的,我想释放数组的一部分并继续处理数组中的数据第一部分。我尝试使用 realloc,但我不确定这是否是正确的方法,因为我必须保留数组中的数据,并且最好避免在内存中复制该块。

#include <cstring>
#include <cassert>
#include <iostream>

using namespace std;

void FillArrayThenTruncate(char* my_array, const int old_size, int* new_size);

int main() {
    const int initial_size = 1024*1024*1024;
    char* my_array = static_cast<char*>(malloc(initial_size));
    assert(my_array);
    int new_size;
    FillArrayThenTruncate(my_array, initial_size, &new_size);
    for(int i = 0; i < new_size; ++i) cout << static_cast<int>(my_array[i]) << endl;
}

void FillArrayThenTruncate(char* my_array, const int old_size, int* new_size) {
    //do something with my_array:
    memset(my_array, 0, old_size);
    for(int i = 0; i < 10; ++i) my_array[i] = i % 3; …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

3
推荐指数
1
解决办法
1860
查看次数

如何删除向量中的元素.(擦除不起作用)

当我用"擦除"删除向量中的元素时,则没有清除内存.例如,我创建了一个大小为2000的向量.创建后,程序使用1.5 MB内存.当我进行擦除呼叫时,不会清除任何内容.所有的元素都消失了.但他们仍然记忆犹新.

例如:

#include <iostream>
#include <vector>

using namespace std;


int main()
{
    //Makes a vector of 2000 items
    vector<int> test(200000);

    //Pause for test purpose
    system("pause");

    //erase all elements
    test.erase(test.begin(),test.end());

    //Pause for test purpose
    system("pause");

    return false;
}
Run Code Online (Sandbox Code Playgroud)

大小返回0.但该过程仍然使用1,5MB的内存.

c++ memory windows vector erase

2
推荐指数
2
解决办法
2004
查看次数

标签 统计

c++ ×7

vector ×6

stl ×5

memory ×3

c++11 ×1

erase ×1

memory-leaks ×1

memory-management ×1

resize ×1

windows ×1