相关疑难解决方法(0)

关于向量增长

曾经阅读过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)

c++ visual-c++

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

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++ ×2

vector ×1

visual-c++ ×1