曾经阅读过Book:C++ Primer,Third Edition作者:Stanley B. Lippman,JoséeLajoie
到目前为止发现1个错误....在根据第6.3条给出的程序中,一个向量如何生长,这个程序在couts中错过了一个"<"!给出的计划是:
#include <vector>
#include <iostream>
int main(){
vector< int > ivec;
cout < "ivec: size: " < ivec.size()
< " capacity: " < ivec.capacity() < endl;
for ( int ix = 0; ix < 24; ++ix ) {
ivec.push_back( ix );
cout < "ivec: size: " < ivec.size()
< " capacity: " < ivec.capacity() < endl;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我纠正了这个问题.本书后面的内容如下:"在Rogue Wave实现中,ivec定义后的大小和容量均为0.然而,在插入第一个元素时,ivec的容量为256,其大小为1."
但是,在纠正和运行代码时,我得到以下输出:
ivec: size: 0 capacity: 0
ivec[0]=0 ivec: size: 1 capacity: 1
ivec[1]=1 ivec: size: …Run Code Online (Sandbox Code Playgroud) 我正在为正确的心理模式和对精神病的理解而挣扎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)