鱼C论坛

 找回密码
 立即注册
查看: 2627|回复: 0

[学习笔记] 045-C++之STL-->vector

[复制链接]
发表于 2018-9-16 22:40:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-9-16 22:40 编辑

1、vector容器简介
vector将元素置于一个动态数组中加以管理。
vector可以随机存取元素(支持索引值直接存取,用[]操作符和at()方法)。
vector尾部添加元素非常快,但在中部或头部添加或移除元素比较费时。
2、vector构造函数
vector采用模板技术,可以存放int,float,string,类对象,指针等元素。
容器元素的存放时按值的复制方式进行的,所以元素类型必须可以复制,(类要了提供拷贝构造函数)。
3、vector元素添加和删除
vector.push_back(i)    尾部添加元素i   
vector.front()      容器的头部元素,可做左值
vector.back()      容器的尾部元素,可做左值
vector[]             []操作
vector.at(i)         at(i)操作,可抛出异常
  1. vector<int> v1;
  2. v1.push_back(1);  // 从尾部添加元素
  3. v1.push_back(3);
  4. v1.push_back(5);
  5. cout << "Length:" << v1.size() << endl;

  6. cout << v1.front();  // 获取头部元素
  7. cout << v1.back();   // 获取尾部元素
  8. v1.pop_back();   // 弹出尾部元素
  9. cout << v1[v1.size()-1];
  10. // 修改头部元素的值
  11. v1.front() = 9;  // 函数返回值当左值(返回引用)
  12. v1.back() = 0;
  13. cout << v1.front() << v1.back() << endl;
复制代码

4、vector元素初始化和遍历
1. 数组方式遍历
2. 迭代器遍历
3. 逆向迭代器遍历
  1. // vector元素初始化
  2. vector<int> v2 = v1;  // 拷贝构造函数初始化
  3. vector<int> v3(v1.begin(), v1.begin() + 2); // 左开右闭

  4. // vector的遍历
  5. vector<int> v4(10);  // 提前分配好内存
  6. for (int i = 0; i < 10; i++)
  7. {
  8.         v4[i] = i + 1;
  9.         cout << v4[i];
  10. }
  11. cout << endl;

  12. // vector的迭代器遍历     //begin指向头元素, end指向最后一个元素的后面
  13. for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
  14. {
  15.         cout << *it << " ";
  16. }
  17. cout << endl;
  18. // vector的逆向迭代器遍历
  19. for (vector<int>::reverse_iterator rit = v4.rbegin(); rit != v4.rend(); rit++)
  20. {
  21.         cout << *rit << " ";
  22. }
复制代码

5、vector删除和插入元素
vec.clear();      移除元素中的所有数据
vec.erase(beg, end);        删除[beg, end)间的数据,并返回下一个数据的位置
vec.erase(pos);               删除pos位置的数据,并返回下一个数据的位置
vec.insert(pos, elem);      在pos位置插入一个elem元素的拷贝,并返回新数据的位置
vec.insert(pos, elem);      在pos位置插入n个elem元素,无返回值
vec.insert(pos, beg, end);    在pos位置插入[beg, end)间的数据,无返回值
  1. // 区间删除操作
  2. v4.erase(v4.begin(), v4.begin() + 3);
  3. v4.erase(v4.begin());
  4. cout << endl;
  5. for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
  6. {cout << *it << " ";}
  7. cout << endl;
  8. // 删除指定值的元素
  9. for (vector<int>::iterator it = v4.begin(); it != v4.end();)
  10. {
  11.         if (*it == 7)
  12.         {
  13.                 it = v4.erase(it); // 当删除迭代器所指向元素的时候,erase操作会让it自动下移
  14.         }
  15.         else
  16.         {
  17.                 it++;
  18.         }       
  19. }
  20. for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
  21. {cout << *it << " ";}
  22. cout << endl;
  23.        
  24. // 插入元素
  25. v4.insert(v4.begin(), 111);
  26. v4.insert(v4.end(), 222);
  27. for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
  28. {cout << *it << " ";}
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 12:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表