首页 技术资料正文

C++vector的使用、创建及初始化(printf)

piaodoo 技术资料 2022-08-27 10:55:17 1135 0

C++ vector的使用、创建及初始化(printf)

C++ vector的使用、创建及初始化

vector 容器是包含 T 类型元素的序列容器,和 array 容器相似,不同的是 vector 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。vector 容器可以方便、灵活地代替数组。在大多数时候,都可以用 vector 代替数组存放元素。只要能够意识到,vector 在扩展容量,以 及在序列内部删除或添加元素时会产生一些开销;但大多数情况下,代码不会明显变慢。 为了使用 vector 容器模板,需要在代码中包含头文件 vector。联系人英语

创建vector容器

下面是一个生成存放 double 型元素的 vector 容器示例:
std::vector values;
因为容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存。可以像下面这样通过调用 reserve() 来增加容器的容量:
values.reserve(20);
这样就设置了容器的内存分配,至少可以容纳 20 个元素。如果当前的容量已经大于或等于 20 个元素,那么这条语句什么也不做。注意,调用 reserve() 并不会生成任何元素。values 容器这时仍然没有任何元素,直到添加了 20 个元素后,才会分配更多的内存。调用 reserve() 并不会影响现有的元素。当然,如果通过调用 reserve() 来增加内存,任何现有的迭代器,例如开始迭代器和结束迭代器,都会失效,所以需要重新生成它们。这是因为,为了增加容器的容量,vector 容器的元素可能已经被复制或移到了新的内存地址。创建 vector 容器的另一种方式是使用初始化列表来指定初始值以及元素个数:
std::vector primes {2u, 3u, 5u, 7u, 11u, 13u, 17u, 19u};
以初始化列表中的値作为元素初始值,生成有 8 个素数的 vector 容器。分配内存是比较花费时间的,所以最好只在必要时分配。vector 使用算法来增加容量,这个算法依赖一个经常使用的常对数来实现,这在早些时候会导致分配一些非常小的内存,但是随着 vector 容量的增大,内存增长数也会变大。可以如下所示,使用初始元素个数来生成 vector 容器:
std::vector values(20);
这个容器开始时有 20 个元素,它们的默认初始值都为 0。生成容器时,同时指定元素个数,就能够减少空间额外分配的次数,这是一个很好的习惯。注意,圆括号中的 20 表示元素的个数,是上述语句的核心。这里不能使用 {}。如果如下所示定义 vector 容器,会产生不同的结果:
std::vector values {20};
vector 并没有 20 个元素。它只有一个元素,并以 20 作为初始值。添加元素会导致分配额外的内存。如果不想用 0 作为默认值,可以指定一个其他值:
std::vector numbers(20, 99L);
第二个参数指定了所有元素的初始值,因此这 20 个元素的值都是 99L。第一个元素指定了 vector 中的元素个数,它不需要是一个常量表达式。它可以是一个表达式执行后的结果,也可以是从键盘输入的数。可以用元素类印相同的容器来初始化 vector 容器。用一对迭代器来指定初始值的范围。下面是一个示例:
std::array words {"one", "two","three", "four", "five"};
std::vector words_copy {std::begin(words) , std::end(words)};
words_copy 被 words 数组容器中的元素初始化。如果使用移动迭代器指定 words_copy 的初始化范围,words 中的元素将会从 words 移到 words_copy。这里有一个示例:
std::vectorwords_copy 会像前面那样被初始化。但元素是移动过来的而不是复制过来的,所以 words 数组中的字符串对象现在都是空字符串。

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/119676.html

搜索