每个容器专属,类似指针
定义:单端数组
#include <iostream> #include <vector> int main() { vector<int> v; v.push_back(10); return 0; }
#include <iostream> #include <vector> int main() { vector<int> v; v.push_back(10); v.push_back(200); v.push_back(39); vector<int>::iterator itbegin=v.begin(); //指向第一个 vector<int>::iterator itend=v.end(); //指向最后一个的下一个 while(itbegin!=itend) { std::cout<<*itbegin<<std::endl; itbegin++; } return 0; }
#include <iostream> #include <vector> #include <for_each> void print(int x) { std::cout<<x<<std::endl; } int main() { vector<int> v; v.push_back(10); v.push_back(200); v.push_back(39); for_each(v.begin(),v.end(),print); //这里的print没有括号 return 0; }
#include <iostream> #include <vector> #include <for_each> int main() { vector<int> v; v.push_back(10); v.push_back(200); v.push_back(39); for(int i=0;i<v.size();i++) { std::cout<<v[i]<<std::endl; } return 0; }
vector<T> v; //默认构造函数 vector(v.begin(),v.end()); //拷贝元素 vector(n,elem) //构造n个elem
vector& operator=(const vector &vec); //等号的运算符重载 assign(begin,end); //类似于拷贝元素
empty() //判断是否为空 capacity() //返回其容量 size() //返回元素个数 size()<=capacity() resize(int x,elem) //重新指定大小
push_back(ele) //尾部插入 pop_back() //删除尾部的元素 insert(const_iterator pos,ele); //在迭代器位置插入元素 erase(const_iterator pos); //删除迭代器位置的元素 clear() //清空元素
这里特别注意erase的用法
v.erase(v.begin()+i); //删除下标为i的元素
at(int index) //读取索引的数据 [] //运算符重载 back() //读取最后一个数据
swap(vec); //互换元素 reserve(int len) //预留空间
string 实质是一个保存字符串的类
特点:
string(); //空字符串 string(const char* s); string(const string& str); string(int n,char c); //n个c的初始化
/*例子*/ #include <string> void test() { string s1; //方法一 const char* str="Hello"; string s2(str); //方法二 string s3(s2); //方法三 string s4(10,'a'); }
直接使用=对其进行赋值
使用+拼接
/*查找*/ int find(const string& str,int pos = 0) const; int find(const char* str,int pos = 0) const; //从pos开始查找str返回第一次出现位置 /*替代*/ string& replace(int pos,int n,const string& str); //替代pos开始n个字符为字符串str
直接使用==比较是否相等,>和<可以比较ASCII码
insert和erase,同vector
string substr(int pos = 0,int n=npos) const; //返回从pos开始的n个字符的子串
/*与find一起 使用可以做正则运算*/ #include <string> #include <iostream> int main() { string a = "ba1caf6289@qq.com" int pos = a.find("@"); string username=a.substr(0,pos); std::cout<<username<<'\n'; //通过该方式可以找出username return 0; }
deque 和 vector 区别:
deque<T> deqT
push_back(elem); //在尾部添加数据 push_front(elem); //在头部添加数据 pop_back(); //删除尾部数据 pop_front(); //删除第一个数据 insert(pos,elem); //插入 clear(); //清空 erase(pos); //删除指定位置数据,返回下一个
sort(iterator beg,iterator end); //对该区间进行排序
/*实例*/ #include <iostream> #include <deque> #include <algorithm> int main() { deque<int> d; d.push_front(10); d.push_front(10); d.push_front(11); d.push_front(13); d.push_front(14); d.push_back(39); d.push_back(32); d.push_back(31); d.push_back(13); d.push_back(59); d.push_back(19); sort(d.begin(),b.end()); return 0; }
特点:先进后出的栈结构,只有顶端元素可以被访问,所以不允许历遍
入栈:push 出栈:pop
stack<T> stk;
push(elem); //在顶端添加元素 pop(); //移除第一个元素 top(); //返回顶部元素
empty(); //判断非空 size(); //返回栈的大小
特点:先进先出的数据结构
queue<T> que;
push(elem); //队尾添加 pop(); //队头移除 back(); //返回最后一个元素 front(); //返回最后一个元素
empty(); //判断是否非空 size(); //返回大小
链表组成:一系列结点
结点组成:数据域和指针域
优点:
缺点:空间和历遍的时间很大
list<T> lst;
list& operator=(const list &lst); //赋值 swap(lst); //交换
empty(); //判断非空 size(); //返回栈的大小
push_back(elem); //尾部加入一个元素 pop_back(); //尾端删除 push_front(elem); //头部加入一个元素 pop_front(); //开头移除第一个元素 insert(pos,n,elem); //在pos位置插入n个elem erase(pos); //删除pos位置的元素 remove(elem); //删除所有elem元素
reverse(); //反转链表 sort(); //链表排序