顺序容器(上)
来源:互联网 发布:java怎么制作游戏 编辑:程序博客网 时间:2024/06/05 08:50
#include <array> //c++11 数组类型#include <list> //双向链表,插入删除速度快,不支持随机访问 #include <forward_list> //c++11 单向链表,单向访问,插入删除速度快,不支持随机访问,没有size操作 #include <deque> //双端队列,支持快速随机访问 #include <string> //插入删除耗时 #include <vector> //插入删除耗时
初始化(除array皆可用)
vector<int> vec; //默认初始化 vector<int> vec(10);//10个都是0的元素 vector<int> vec1(10, 1);//10个都是1的元素 vector<int> vec{ 1,2,3,4,5 };
注意花括号和括号的区别
vector<string> vec{ 10 };//10个元素 vector<string> vec{ 10,"hi" };//10个都是"hi"的元素
ivec的元素类型要能够隐式转换为vec的元素类型
vector<int> vec(ivec); //复制 vector<int> vec(ivec.begin(), ivec.end());//复制指定范围
迭代器
1.迭代器之间的加减,自加自减运算
2.大小比较(只限vector和string)
#include <iterator>string::iterator//读写string::const_iterator//只读vector<int>::iterator//读写vector<int>::const_iterator//只读auto it = s1.begin();auto it = s1.end();string::const_iterator//只读auto it = s1.cbegin();auto it = s1.cend();
函数
for (auto ix = ivec.begin(); ix != ivec.end(); ++ix)//此处不该为int 用!=,而不用<= *ix = 0; //将各个元素赋值为0
while (iter != vi.end()) {}//每次循环后需要重新确定尾后迭代器的位置
vector<int>::iterator find1(vector<int>::iterator a, vector<int>::iterator b, int c)//可以用decltype(s1.begin()) {for (a; a != b; a++){if (*a == c)//迭代器需进行解引用操作 return a;}return b;//未找到的情况,返回最后一个迭代器 }
操作
vec1 = vec2;//用等号复制类型必须相同/*拷贝容器来进行新建的容器类型必须相同*/vector<const char*>s1 = { "asad" };vector<string>s2(s1);//无法转换/*拷贝容器范围来进行新建的容器类型只要可以相互转换*/vector<string>s2(s1.begin(), s1.end());swap(vec, vec1);//不用加点的版本/* 交换后vec1有5个元素,vec1有10个元素 原来指向vec的指针会指向ivec 交换的是整个容器内容 可以认为交换的是容器的名字 对string使用会使迭代器失效 对于array使用交换的是元素内容,引用和迭代器不会失效*/ivec3.assign(ivec4.begin(), ivec4.end());ivec3.assign(10, 11);//10个11 ivec3.assign({ 2,2,2,2,2,2 });/* 除array之外 swap的类型要求相同 assign只要求相容(例如char*转化为string) 先定义后使用*/vec.empty();/*forward_list无法使用*/vec.size();/*返回为unsigned型,string::size_type*/
/* array和forward_list无法使用 使用以下插入函数只有list的引用和迭代器不会失效 vector,string,deque需要更新迭代器 插入的是对象的拷贝,而不是对象本身*//*返回void*///在while循环中记得+2vec.push_back();vec.push_front();//vector和string不支持vec.emplace_back();vec.emplace_back(171,"meiyouren");//根据内容调用相应的构造函数il.emplace_front(171, "meiyouren");//除vector和string
iter = il.insert(iter, p1);/*在iter之前插入1个元素,返回指向新元素的迭代器*//* 指向原来的下一个元素要+2 vector(除了末尾),string,deque使用插入的速度很耗时*/vec2.insert(iter2, 3, 10);//迭代器位置之前插入n个t元素 ivec3.insert(iter3, ivec2.begin(), ivec2.end());//迭代器位置之前插入另一个类型相同容器迭代器范围内的元素 ivec4.insert(ivec.begin(), {1,1,1});
访问
//返回引用int a = vec1.front();int b = vec1[0];/*返回为unsigned型,string::size_type forward_list和list不能用下标运算*/int c = vec1.at(0);
删除
/* 不适用于array 删除deque中除首尾位置之外的任何元素都会使所有迭代器,引用指针失效 如有需要请先保存*/vec.pop_back(); /*删除尾元素,返回void除forward_list*/vec.pop_front(); //除vector和listvec.erase(iter) //删除迭代器p指向的元素,返回被删除元素的下一个元素的迭代器vec.erase(iter1,iter2) //删除迭代器(b, e)范围内的元素,返回e的下一个元素的迭代器vec.clear() //删除c中所有的元素
0 0
- 顺序容器(上)
- 顺序容器(上)
- C++ Primer(顺序容器 上)
- 第九章 顺序容器(上)
- C++容器(顺序容器、关联容器)
- 顺序容器(下)
- 顺序容器(下)
- C++ 容器(一):顺序容器简介
- 笔记3 (顺序容器)
- (50)顺序容器概述
- (52)顺序容器操作
- C++ Primer 学习笔记_28_STL实践与分析(2) --顺序容器的操作(上)
- 容器(上)
- Servlet 容器(上)
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- Eclipse Amaterasuml安装
- 打基础系列-----java泛型
- Centos7配置NFS服务
- 114:Sqrt(x)
- Python数据挖掘课程 六.Numpy、Pandas和Matplotlib包基础知识
- 顺序容器(上)
- 第一课hello world的启发
- hdoj1059 Dividing 多重背包
- spfa + 静态链表 模板
- 1085: [SCOI2005]骑士精神
- UVA 10976
- 一个简单的每日访客IP统计
- T_SQL 将一列多行数据合并为一行
- PHP编程的安全性思考