C++基础:STL之变长数组vector

淩亂°似流年 2022-12-18 02:56 208阅读 0赞

在这里插入图片描述
这篇文章介绍一下STL中vector的基本使用方法。

目录

  • 变长数组vector
  • 头文件和命名空间
  • 常用的成员函数
  • 代码使用示例
  • 示例执行结果
  • 总结

变长数组vector

本质上来说vector属于数据结构中数组的实现,由此对于其操作复杂度上查找为O(1),插入删除为O(n)就非常容易理解了,因为物理上连续的存储方式导致了插入和删除的连锁移动导致的O(n),支持变长使得使用者不必自行realloc内存用于扩充,vector会替你来做此事,能节省一些精力。

  • 关于对于数组和链表的说明内容可参看:https://blog.csdn.net/liumiaocn/article/details/108088361

头文件和命名空间

#include
using namespace std;

常用的成员函数




























































函数名 用途 功能说明 时间复杂度
size() 查询遍历 获取元素个数 O(1)
begin() 查询遍历 获取指向第一个元素的迭代器 O(1)
end() 查询遍历 获取末尾的迭代器 O(1)
insert(position,x) 插入 在position位置插入数据x O(n)
erase(position) 删除 删除position位置上的元素 O(n)
push_back(x) 插入 在末尾插入数据x O(1)
pop_back() 删除 删除最后一个元素 O(1)
clear() 删除 删除所有元素 O(n)

注:因为对于末尾的元素的插入和删除不涉及元素的连锁移动,所以复杂度为O(1),另外成员函数中似乎未涉及更新,这是因为vecotr可以像数组一样直接使用下标方式访问和修改,其复杂度当然也是O(1)。


代码使用示例

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5. vector<char> v;
  6. cout << "Size of vector v : " << v.size() << endl;
  7. v.push_back('L');
  8. v.push_back('i');
  9. v.push_back('u');
  10. v.push_back('C');
  11. v.push_back('N');
  12. cout << "Size of vector v : " << v.size() << endl;
  13. for (int i=0; i<v.size(); i++) cout << v[i];
  14. vector<char>::iterator it = v.begin();
  15. cout << "begin(): [" << *it << "]" << endl;
  16. it = v.end();
  17. cout << "end(): [" << *it << "]" << endl;
  18. it--;
  19. cout << "end(): [" << *it << "]" << endl;
  20. it = v.begin() + 3;
  21. v.insert(it++, 'M');
  22. v.insert(it++, 'i');
  23. v.insert(it++, 'a');
  24. v.insert(it++, 'o');
  25. it = v.begin();
  26. while (it != v.end()) cout << *it++;
  27. cout << endl;
  28. it = v.begin() + 3;
  29. v.insert(it,' ');
  30. it = v.begin();
  31. while (it != v.end()) cout << *it++;
  32. cout << endl;
  33. v[3] = '*';
  34. it = v.begin();
  35. while (it != v.end()) cout << *it++;
  36. cout << endl;
  37. v.erase(v.begin()+3);
  38. it = v.begin();
  39. while (it != v.end()) cout << *it++;
  40. cout <<endl;
  41. v.push_back('!');
  42. it = v.begin();
  43. while (it != v.end()) cout << *it++;
  44. cout <<endl;
  45. v.pop_back();
  46. it = v.begin();
  47. while (it != v.end()) cout << *it++;
  48. cout <<endl;
  49. cout << "Size of vector v : " << v.size() << endl;
  50. v.clear();
  51. cout << "Size of vector v : " << v.size() << endl;
  52. }

示例执行结果

  1. Size of vector v : 0
  2. Size of vector v : 5
  3. LiuCNbegin(): [L]
  4. end(): []
  5. end(): [N]
  6. LiuMiaoCN
  7. Liu MiaoCN
  8. Liu*MiaoCN
  9. LiuMiaoCN
  10. LiuMiaoCN!
  11. LiuMiaoCN
  12. Size of vector v : 9
  13. Size of vector v : 0

总结

变长支持、泛化类型、常用功能函数内嵌、可以使用其他多种STL的函数、使用简单等,都是vector被广泛使用的原因

发表评论

表情:
评论列表 (有 0 条评论,208人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c++ STL(vector)

    标准库类型vector 参考书籍:c++ primer 标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用