相关疑难解决方法(0)

std :: vector如何支持未知大小的自定义对象的连续内存

我正在为正确的心理模式和对精神病的理解而挣扎std::vector

我以为我知道

当创建类型T的向量,然后为该向量保留N个元素时,编译器基本上会找到并保留一个连续的内存块,即N * sizeof(T)字节。例如,

// Initialize a vector of int
std::vector<int> intvec;

// Reserve contigious block of 4 4-byte chunks of memory
intvec.reserve(4);  // [ | | | ]

// Filling in the memory chunks has obvious behavior:
intvec.push_back(1);  // [1| | | ]
intvec.push_back(2);  // [1|2| | ]
Run Code Online (Sandbox Code Playgroud)

然后,我们可以在随机访问时间内访问任何元素,因为如果我们要求向量的第k个元素,我们只需从向量的开始处的内存地址开始,然后“跳转” k * sizeof(T)字节以获取第k个元素。

自定义对象

我的思维模型针对大小未知/不同的自定义对象进行了分解。例如,

class Foo {

public:
    Foo() = default;
    Foo(std::vector<int> vec): _vec{vec} {}

private:
    std::vector<int> _vec;
};

int main() {

    // …
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

标签 统计

c++ ×1

vector ×1