【vector】动态数组
#include <vector> //在VS下实现,其他IDE可能不行
vector<int> arr(128);
int capacity=arr.capacity(); //缓冲区容量128
int size=arr.size(); //大小,即元素个数 128
arr[0]=12; //初始值为0,修改为12
arr.at(1)=23; //另一种方法修改初始值
vector<int > arr;
arr.push_back(5); //capacity=1 size=1 加入一个元素,值为5 但capacity可能不是增加一个单位
arr.pop_back(); //将size减1,capaity不变
arr.clear(); //将size变为0,capaity不变
内部类 迭代器 iterator
vector<int >::iterator iter; //iter是指针,存地址值
for (iter = arr.begin(); iter < arr.end(); iter++) //arr.begin()是首地址值,arr.end()是末尾地址
{
cout << *iter << " ";
}
另一种方法遍历
for(i=0;i<arr.size;i++)
cout<<arr[i]<< " ";
插入和删除
arr.insert(arr.begin()+3,77); //插入位置用地址表示,+3表示第4个位置
arr.erase(arr.begin()+3);
【list】 链表 比vector重要
#include <list>
list<int> lst;
lst.push_front(4); //在头部插入一个元素4
lst.push_back(3); //在尾部插入一个元素3
lst.pop_front(); //删除
lst.pop_back();
cout << lst.size()<<endl; //取长度
迭代器 遍历
list<int >::iterator iter;
for (iter = lst.begin(); iter != lst.end(); iter++) //用!= 不能用<
cout << *iter << " ";
//删除值为3的结点
for (iter = lst.begin(); iter != lst.end(); iter++) //用!= 不能用<
if (*iter == 3)
{
lst.erase(iter);
break; //不加break会出错
}
lst.insert(++lst.begin(),100); //插入
iter = lst.begin();
for (i = 0; i < 2; i++)iter++; //iter每次只能加1
lst.insert(iter,100); //插入
【string】 字符串
#include <string> //STL都不加.h
string str=NULL; //程序会出错
应该string str;或者string str="";
str.c_str() //把string转为char*
在尾部添加字符串
str2.append("abc",2); //取前2个字符
str2.append( "abcde",2,2); //从第2+1个字符开始,取2位字符
str2.append(3,'a'); //加入3个a
str2.clear(); //清除字符串为空
str2[1] = 'i';或者str2.at(1) = 'i';
查找
cout<<str2.find('a')<<endl; //返回第1个a的位置(位置从0开始计数),不存在返回乱码
cout << str2.rfind( 'a') << endl; //返回最后一个a的位置(位置从0开始计数) 从右往左查找