c++ - 关于 vector 内存存储

标签 c++ vector

我正在学习 vector 在 C++ 中的工作方式,并编写了一个示例程序来尝试了解如何处理 vector 内存。

#include <iostream>
#include <vector>

int main()
{

//Test 1:
double n = 3.5;
std::vector<double> test;
std::cout <<  sizeof(test) << std::endl;
test.push_back(n);    
std::cout << sizeof(test) << std::endl;

std::cout << std::endl;
   std::cout << std::endl;
      std::cout << std::endl;

//Test 2


std::vector<int> test2;
std::cout << sizeof(test2) << std::endl;
for (int i = 0; i < 1000; i++) {

 test2.push_back(i);   

}

 std::cout << sizeof(test2) << std::endl;
}

有趣的是,程序每次都打印出 24 作为存储的字节数。尽管向 vector 中添加了新元素。 vector 在初始声明时占用的内存量与我向 vector 添加元素后占用的内存量如何?

最佳答案

在内部,vector 对象有一个指向包含元素的动态分配内存的指针。当您使用 sizeof(test) 时,您只是获取包含指针的结构的大小,不包括它指向的内存的大小。

此内存必须动态分配,以便 vector 可以根据需要增长和收缩。类对象不可能更改其大小。

要获取数据存储使用的内存量,请使用 sizeof(double) * test.capacity()

关于c++ - 关于 vector 内存存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772171/

相关文章:

c++ - 找不到 BOOST_FILESYSTEM(缺少 : BOOST_FILESYSTEM_LIBRARIES)

android - 如何使用 Windows 使用 NDK r18b 为 Android 编译 boost 1.68.0

c++ - insert in string的效率

c++ - 从 vector 中删除元素后出现段错误

c++ - 为什么 volatile 对象不能调用非 volatile 成员函数

c++ - 将基类对象分配给派生类对象

c++ - 如何将 std::vector 转换为 Eigen 中的矩阵?

r - 将向量列表转换为数据框

c++ - 从 vector 中删除对象的特定实例

c++ - 删除元素时 std::vector 中可能存在不一致