std::vector<double> values;因为容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存。可以像下面这样通过调用 reserve() 来增加容器的容量:
values.reserve(20);这样就设置了容器的内存分配,至少可以容纳 20 个元素。如果当前的容量已经大于或等于 20 个元素,那么这条语句什么也不做。注意,调用 reserve() 并不会生成任何元素。values 容器这时仍然没有任何元素,直到添加了 20 个元素后,才会分配更多的内存。调用 reserve() 并不会影响现有的元素。
std::vector<unsigned int> primes {2u, 3u, 5u, 7u, 11u, 13u, 17u, 19u};以初始化列表中的値作为元素初始值,生成有 8 个素数的 vector 容器。
std::vector<double> values(20);这个容器开始时有 20 个元素,它们的默认初始值都为 0。生成容器时,同时指定元素个数,就能够减少空间额外分配的次数,这是一个很好的习惯。
std::vector<double> values {20};vector 并没有 20 个元素。它只有一个元素,并以 20 作为初始值。添加元素会导致分配额外的内存。
std::vector<long> numbers(20, 99L);第二个参数指定了所有元素的初始值,因此这 20 个元素的值都是 99L。第一个元素指定了 vector 中的元素个数,它不需要是一个常量表达式。它可以是一个表达式执行后的结果,也可以是从键盘输入的数。
std::array<std :: string, 5> words {"one", "two","three", "four", "five"}; std::vector<std::string> words_copy {std::begin(words) , std::end(words)};words_copy 被 words 数组容器中的元素初始化。如果使用移动迭代器指定 words_copy 的初始化范围,words 中的元素将会从 words 移到 words_copy。这里有一个示例:
std::vector<std::string〉 words_copy {std::make_move_iterator(std::begin(words)),std::make_move_iterator(std:: end(words))};words_copy 会像前面那样被初始化。但元素是移动过来的而不是复制过来的,所以 words 数组中的字符串对象现在都是空字符串。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有