当前位置:   article > 正文

vector容器用法详解_algorithm

algorithm

目录

 

类模板std::vector

容器属性

函数总览:

Iterators(迭代器):

begin:将迭代器返回到开头。

end:将迭代器返回到结束。

rbegin:返回反向迭代器以反向开始。

rend:将反向迭代器返回到反向结束。

Capacity(容量):

max_size:迭返回代器可以作为内容保存的最大元素数。

size:返回向量中的元素数。

resize:改变容器大小

capacity[kə'pæsəti]:返回分配的存储容量大小

reserve:请求更改容量

empty:检测向量是否为空

Element access(元素访问):

operator[]:访问元素

at:访问元素

front:访问第一个元素

back:访问最后一个元素

Modifiers(编辑):

assign:分配向量内容

push_back:在最后添加元素

pop_back:删除最后元素

insert:插入元素

erase[ɪ'reɪz]:擦除元素

swap:交换元素

clear:清空元素

函数详解:

Iterators(迭代器):

begin: -->end: -->rbegin: -->rend:

Capacity(容量):

max_size: -->size: -->rsize: -->capacity: -->reserve: -->empty:

Element access(元素访问):

operator[]: -->at: -->front: -->back:

Modifiers(编辑):

assign: -->push_back: -->pop_back: -->insert: -->erase: -->swap: -->clear:


类模板std::vector

template <class Tclass Alloc = allocator <T >> class vector; //通用模板

容器属性

序列

序列容器中的元素按严格的线性顺序排序。各个元素按其顺序访问它们的位置。

动态数组

允许直接访问序列中的任何元素,甚至通过指针算术,并在序列的末尾提供相对快速的元素添加/删除。

分配感知器

容器使用allocator对象来动态处理其存储需求。

向量(vector)

向量是表示可以改变大小的数组的序列容器。

就像数组一样,向量使用连续的存储位置作为元素,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,并且与数组一样有效。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。

在内部,向量使用动态分配的数组来存储它们的元素。可能需要重新分配此数组,以便在插入新元素时增大大小,这意味着分配新数组并将所有元素移动到该数组。就处理时间而言,这是相对昂贵的任务,因此,每次将元素添加到容器时,向量不会重新分配。

相反,向量容器可以分配一些额外的存储以适应可能的增长,因此容器可以具有大于包含其元素(即,其大小)严格需要的存储的实际容量。库可以实现不同的增长策略以在内存使用和重新分配之间取得平衡,但无论如何,重新分配只应以对数增长的大小间隔发生,以便在向量末尾插入单个元素可以提供摊销的常量时间复杂性(见push_back)。

因此,与数组相比,向量消耗更多内存以换取管理存储和以有效方式动态增长的能力。

与其他动态序列容器(dequse,lists和forward_lists)相比,向量非常有效地访问其元素(就像数组一样)并且相对有效地从其末尾添加或删除元素。对于涉及在末尾以外的位置插入或删除元素的操作,它们的性能比其他位置差,并且与列表和forward_lists相比具有更少的一致的迭代器和引用。


函数总览:

member function:

Iterators(迭代器):

注:迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。

begin:将迭代器返回到开头。

end:将迭代器返回到结束。

rbegin:返回反向迭代器以反向开始。

rend:将反向迭代器返回到反向结束。

 

Capacity(容量):

max_size:迭返回代器可以作为内容保存的最大元素数

size:返回向量中的元素数。

resize:改变容器大小

capacity[kə'pæsəti]:返回分配的存储容量大小

reserve:请求更改容量

empty:检测向量是否为空

 

Element access(元素访问):

operator[]:访问元素

at:访问元素

front:访问第一个元素

back:访问最后一个元素

 

Modifiers(编辑):

assign:分配向量内容

push_back:在最后添加元素

pop_back:删除最后元素

insert:插入元素

erase[ɪ'reɪz]:擦除元素

swap:交换元素

clear:清空元素


函数详解:

Iterators(迭代器):

begin:

将迭代器返回到开头。返回指向向量中第一个元素的迭代器。

iterator begin();

请注意,与成员vector :: front不同,它返回对第一个元素的引用,此函数返回指向它的随机访问迭代器。

  1. /*======================================
  2. 函数操作:begin()
  3. 函数参数:无
  4. 函数返回:指向vector 中第一个元素iterator
  5. ======================================*/
  6. #include <iostream>
  7. #include <vector>
  8. using namespace std;
  9. int main()
  10. {
  11. vector<int> myvector;
  12. for(int i = 1; i <= 5; i++)
  13. myvector.push_back(i);
  14. vector<int>::iterator it; //it是迭代器指针类型,对vector 迭代器指针进行++,相当于对数组指针进行++操作。
  15. std::cout << "myvector contains:";
  16. for(it = myvector.begin(); it != myvector.end(); it++)
  17. cout<<*it<<" ";
  18. cout<<endl;
  19. return 0;
  20. }
  21. /*=======================================
  22. 函数输出:myvector contains:1 2 3 4 5
  23. =======================================*/

end:

将迭代器返回到结束.返回一个迭代器,引用向量容器中的past-the-end元素(一个不存在的元素)。

iterator end();

后端元素是向量中最后一个元素后面的理论元素(此处可以理解为:向量中最后一个数据的下一个数据地址,如果这个位置曾经存储过数据,则*object.end()返回该数据的值)。它不指向任何元素,因此不应取消引用。因为标准库的函数使用的范围不包括其闭合迭代器指向的元素,所以此函数通常与vector :: begin结合使用以指定包含容器中所有元素的范围。 如果容器为空,则此函数返回与vector :: begin相同的值。

  1. /*======================================
  2. 函数操作:end()
  3. 函数形参:无
  4. 函数返回:指向vector 中最后一个元素的下一个
  5. 元素的iterator
  6. 注意:[myvector.begin(), myvector.end())
  7. 表示左闭右开区间
  8. ======================================*/
  9. #include <iostream>
  10. #include <vector>
  11. int main()
  12. {
  13. std::vector<int> myvector;
  14. for(int i = 1; i <= 5; i++)
  15. myvector.push_back(i);
  16. std::cout << "myvector contains:";
  17. for(std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); it++)
  18. std::cout << *it << " ";
  19. std::cout << std::endl;
  20. return 0;
  21. }
  22. /*=======================================
  23. 函数输出:myvector contains:1 2 3 4 5
  24. =======================================*/

注:迭代器不能等于 end();比如 it = myvector.end(); 运行结果如下图,end()是一个错误的指针

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1021067
推荐阅读
相关标签
  

闽ICP备14008679号