gpt4 book ai didi

c++ - C++ STL 中用于动态容器的内存分配

转载 作者:行者123 更新时间:2023-12-02 10:17:31 25 4
gpt4 key购买 nike

当您声明二维数组时,它们存储在连续的内存位置,这很容易,因为在声明它们时行数是固定的。

而当我们声明一个二维 vector vector<vector<int>> v , 它是如何工作的。因为行数根本不固定。我的第一个猜测是你 push_back 的新 vector 是随机分配的,但即使这样也行不通,因为这些 int vector 是随机访问的。

我的第一个猜测是在内存中随机分配 int vector 并将它们的地址存储在另一个地址 vector 中。
例如

vector<vector<int>> vmain;

vector<int> a = {1, 2, 3};
vector<int> b = {1, 2, 3};
vector<int> c = {1, 2, 3};

vmain.push_back(a);
vmain.push_back(b);
vmain.push_back(c);

存储类似于
vector<&vector<int>> vmain; //vector of pointer to vector

vector<int> a = {1, 2, 3};
vector<int> b = {1, 2, 3};
vector<int> c = {1, 2, 3};

vmain.push_back(&a);
vmain.push_back(&b);
vmain.push_back(&c);

请告诉我这是否是正确的方法。

也适用于 map 或集合的 vector vector<map<int, int>> v1vector<set<int>> v2 .由于 map 和集合的大小不固定。

最佳答案

vector 对象不存储元素。它存储指向包含元素的连续内存块的指针。当你有 std::vector<std::vector<int>>外部 vector 包含一个指向包含 vector 对象的连续内存块的指针,每个 vector 对象都有一个指向包含整数的连续内存块的指针。
std::mapstd::set也不要将元素存储在对象本身中。每个对象都包含一个指向包含元素的 BST 的指针。

关于c++ - C++ STL 中用于动态容器的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61451128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com