C++中STL标准库std::vector怎么用


小编给大家分享一下C++中STL标准库std::vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vecto免费云主机域名r 是表示可以改变大小的数组的序列容器。与arrays一样,vector 对元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问它们的元素,并且与在数组中一样高效。但是与arrays不同,它们的大小可以动态变化,容器会自动处理它们的存储。在内部,vector 使用一个动态分配的数组来存储它们的元素。这个数组可能需要重新分配,以便在插入新元素时增大大小,这意味着分配一个新数组并将所有元素移动到其中。就处理时间而言,这是一项相对昂贵的任务,因此,vector 不会在每次向容器添加元素时重新分配。相反,vector 容器可以分配一些额外的存储空间以适应可能的增长,因此容器的实际容量可能大于严格需要的存储容量(即容器的大小)。库可以实现不同的增长策略,以平衡内存使用和重新分配,但在任何情况下,重新分配只应在大小的对数增长间隔进行,以便在向量末尾插入单个元素可以提供摊余的恒定时间复杂度(请参阅“推后”)。因此,与arrays相比,vector 消耗更多的内存,以换取管理存储和以高效方式动态增长的能力。与其他动态序列容器(deques、list和forward_list)相比,vectors可以非常高效地访问其元素(就像数组一样),并相对高效地从其末尾添加或删除元素。对于涉及在结尾以外的位置插入或删除元素的操作,它们的性能比其他操作差,迭代器和引用的一致性也不如列表和转发列表。(1) 空容器构造函数
(默认构造函数)构造一个没有元素的空容器。(2) 填充构造函数
用n个元素构造一个容器。每个元素都是val的副本(如果提供)。(3) 范围构造函数
构造一个包含与range[first,last]一样多的元素的容器,每个元素的emplace都是按照相同的顺序从该范围中的相应元素构造的。(4) 复制构造函数(并使用分配器复制)
以相同的顺序构造一个容器,其中包含x中每个元素的副本。(5) 移动构造函数(并使用分配器移动)
构造一个获取x元素的容器。
如果alloc被指定并且与x的分配器不同,那么元素将被移动。否则,就不会构建任何元素(它们的所有权被直接转移)。
x处于未指定但有效的状态。(6) 初始化列表构造
以相同的顺序构造一个容器,其中包含il中每个元素的副本。Destroys the container object.返回指向容器中第一个元素的迭代器。返回指向向量中第一个元素的迭代器。注意,与member vector::front不同,member vector::front返回对第一个元素的引用,该函数返回指向该元素的随机访问迭代器。如果容器为空,则返回的迭代器值不应被取消引用。返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。返回一个迭代器,该迭代器引用向量容器中过去的结束元素。过去的结束元素是理论元素,它将跟随向量中的最后一个元素。它不指向任何元素,因此不应被取消引用。由于标准库的函数使用的范围不包括其结束迭代器所指向的元素,因此此函数通常与vector::begin结合使用,以指定一个包含容器中所有元素的范围。如果容器为空,此函数将返回与vector::begin相同的值。返回指向最后一个元素的迭代器。返回指向向量中最后一个元素的反向迭代器(即它的反向开始)。反向迭代器向后迭代:增加它们会将它们移向容器的开头。rbegin指向成员端将指向的元素之前的元素。注意,与member vector::back不同,member vector::back返回对同一元素的引用,此函数返回反向随机访问迭代器。返回指向第一个元素所在位置前一个位置的迭代器。返回一个反向迭代器,该迭代器指向向量中第一个元素之前的理论元素(该元素被视为其反向末端)。
vector::rbegin和vector::rend之间的范围包含向量的所有元素(按相反的顺序)。和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。返回指向容器中第一个元素的常量迭代器。const_iterator是指向const内容的迭代器。这个迭代器可以增加和减少(除非它本身也是const),就像vector::begin返回的迭代器一样,但是它不能用来修改它指向的内容,即使vector对象本身不是const。如果容器为空,则返回的迭代器值不应被取消引用。和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。返回一个指向容器中结束元素的常量迭代器。const_iterator是指向const内容的迭代器。这个迭代器可以增加和减少(除非它本身也是const),就像vector::end返回的迭代器一样,但是它不能用来修改它指向的内容,即使vector对象本身不是const。如果容器为空,此函数将返回与vector::cbegin相同的值。返回的值不应被取消引用。和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。返回一个const_reverse_迭代器,指向容器中的最后一个元素(即它的反向开始)。和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。返回一个const_reverse_迭代器,该迭代器指向容器中第一个元素之前的理论元素(该元素被视为其反向端)。返回实际元素个数。返回矢量中的元素数。
这是向量中保存的实际对象的数量,它不一定等于它的存储容量。返回元素个数的最大值。这通常是一个很大的值,一般是 232-1,所以我们很少会用到这个函数。返回向量可以容纳的最大元素数。
这是由于已知的系统或库实现限制,容器可以达到的最大潜在大小,但容器决不能保证能够达到该大小:在达到该大小之前,它仍然可能无法在任何时候分配存储。改变实际元素的个数。调整容器大小,使其包含n个元素。
如果n小于当前容器的大小,则内容将缩减为其前n个元素,移除超出的元素(并销毁它们)。
如果n大于当前容器大小,则通过在末尾插入足够多的元素来扩展内容,以达到n的大小。如果指定了val,则将新元素初始化为val的副本,否则,它们将被值初始化。
如果n也大于当前容器容量,则自动重新分配已分配的存储空间。
请注意,此函数通过插入或删除容器中的元素来更改容器的实际内容。返回当前容量。返回当前为向量分配的存储空间的大小,以元素表示。
这个容量不一定等于向量大小。它可以相等或更大,额外的空间可以适应增长,而不需要在每次插入时重新分配。
请注意,此容量不假定对向量大小有限制。当这个容量耗尽并且需要更多容量时,容器会自动扩展它(重新分配它的存储空间)。向量大小的理论限制由成员max_size给出。
可以通过调用成员vector::reserve显式更改向量的容量。** 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。**返回向量是否为空(即其大小是否为0)。
此函数不会以任何方式修改容器。若要清除向量的内容,请参见vector::clear。增加容器的容量。要求向量容量至少足以包含n个元素。
如果n大于当前向量容量,函数将使容器重新分配其存储空间,将其容量增加到n(或更大)。
在所有其他情况下,函数调用不会导致重新分配,向量容量也不会受到影响。
此函数对向量大小没有影响,并且不能更改其元素。将内存减少到等于当前元素实际所使用的大小。请求容器减小其容量以适合其大小。
请求是非绑定的,容器实现可以自由地进行优化,使向量的容量大于其大小。
这可能会导致重新分配,但对向量大小没有影响,并且无法更改其元素。重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。返回对向量容器中位置n处元素的引用。
类似的成员函数vector :: at与该运算符具有相同的行为,不同之处在于vector :: at已进行边界检查,并通过引发out_of_range异常来发出信号,以指示请求的位置是否超出范围。
可移植程序永远不要使用参数n超出范围来调用此函数,因为这会导致未定义的行为。

相关推荐: HTML5是怎么起步的

这篇文章主要讲解了“HTML5是怎么起步的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5是怎么起步的”吧!   HTML5 是如何起步的?   HTML5 是 W3C 与 WHATWG 合作的结果,W…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 10/13 14:05
下一篇 10/13 14:05

相关推荐