您的位置:首页 > 其它

常用STL用法总结

2016-06-12 15:56 344 查看
13个头文件

vector
初始化

访问
1下标访问非所有容器均支持

2迭代器访问

功能最最基本
1修改

2信息检索

3查找

4排序

map
初始化

访问

功能

List
初始化

访问

功能
修改

查找

信息检索

排序

13个头文件

<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>、<utility>


算法部分主要由头文件
<algorithm>,<numeric>
<functional>
组成。

分类:

向量(vector): 连续存储的元素

列表(list): 由节点组成的双向链表,每个结点包含着一个元素

双队列(deque): 连续存储的指向不同元素的指针所组成的数组

集合(set): 由节点组成的红黑树,每个节点都包含着一个元素

栈(stack): 后进先出的值的排列

队列(queue): 先进先出的执的排列

映射(map): 由{键,值}对组成的集合,以某种作用于键对上的谓词排列

vector

初始化:

vector<元素类型> 名字;//初始化一个空向量
vector<元素类型(如int,)> 名字(如arr)(长度(如10) );//初始化长度的vector
vector<元素类型> vector_a(vector_b);//拷贝初始化
vector<元素类型> 名字(长度,初始值);//初始化长度并每个赋值为初始值
vector< int > vecname( a, a+6 );
//初始化为已有数组的一部分,此例整型数组a[0]到a[5]共6个元素初始化为int型的vector


访问:

1)下标访问(非所有容器均支持):

vector<int> a(10,-1);
cout << a[6] << endl;//输出-1


2)迭代器访问:

开头第一个元素的指针默认为(容器名.begin()如a.begin())

最后一个元素的下一个位置的指针默认为(容器名.end()如a.end())

vector::iterator it = text.begin();

//定义迭代器(容器类型<元素类型>::iterator 名字)并指向容器的第一个元素

++it,–it//迭代器可以如同指针一样移动

*it; //it相当于指向向量容器text的一个指针,可以使用*it这样的方式来取到元素

功能(最最基本):

1)修改

Vector.pop_back()//删除最后一个数据

Vector.push_back(element)//尾部加入一个数据

Vector.erase(position) //删除position位置的数据

Vector.erase(begin, end) //删除[begin, end)区间的数据

Vector.insert(position, element)//在position位置插入一个element拷贝

2)信息检索

Vector.size()//返回容器中实际数据的个数。

Vector.begin()//返回指向容器第一个元素的迭代器

Vector.end()//返回指向容器最后一个元素的下一个位置的迭代器

3)查找

vector ::interator it = find(vi.begin(), vi.end(), targetItem) ;

//从开头找到末尾,返回找到的元素的指针给it,没有则返回vi.end()

cout << *it << endl ; ///返回容器内找到值的位置。

4)排序

sort(vi.begin() , vi.end()); // 从小到大

//以上只能比较已有类型,需要比较自定义类的,需在类里面写上比较函数,写法自寻

// sort(vi.begin(), vi.end(),compare()) ;

注意:

//插入和赋值不要搞混!
vector<int> vec;
vec[0] = 1024; //错误!vec是空的,应该使用push_back!
//插入在最后一个位置!
vector<int> vec(10);
vec.push_back(2)//size变成11!


map

(key-value,其中第一个称为关键字,每个关键字只能出现一次,第二个可称为该关键字的值)

初始化:

map

访问:

Int T=string_int[“target”];//直接使用key访问value

string V=int_string[2];

it->first;it->second;//定义迭代器,first与second分别为key与value

功能:

修改
Map.insert(pair<int,string>(102,"aclive"));//关于pair类型请自行查找相关信息
Map.insert(map<int,string>::value_type(321,"hai"));//前两种只适用于key不存在!
Map[112]="April";//简单最常用的插入添加!当key已经存在时,会修改对应value
//用迭代器删除
map<int, string>::iterator iter;
iter = mapStudent.find(1);
mapStudent.erase(iter);
//用关键字删除
Int n = mapStudent.erase(1);//删除了返回1,否则返回0
//用迭代器,成片的删除
mapStudent.earse(mapStudent.begin(), mapStudent.end());
//成片删除要注意的是,删除区间是一个前闭后开的集合
查找
it=string_int.find(targetItem);//find函数可以如同之前vector一样定义范围=
if(it==string_int.end())
{/*找不到数据*/}
else {/*找到数据*/}
信息检索
Map.size()//返回容器中实际数据的个数
Map.begin()//返回指向容器第一个元素的迭代器
Map.end()//返回指向容器最后一个元素的下一个位置的迭代器


4)排序

自动按key升序排列,key有固定的含义,一般是不需要排序的

List

(双向链表,允许快速的插入和删除,但是随机访问却比较慢)

初始化:

list<类型> 容器名;

访问:

不能通过下标,只能逐项遍历!

for (list <int>::iterator it = test.begin (); it != test.end (); it ++)
 {
if (*it == target)
{ /*已经得到*it */ }
}


功能:

修改

List.assign(长度,初始值);//整体赋值

List.push_front (target);//前添加

List.push_back (target);//后添加

List.pop_front();//前移除

List.pop_back();//后移除

List.insert(List.begin()+1,3,9);//从第二位开始插入3个9

List.erase(List.begin()+1);//擦除第二位元素

查找

it=List.find(targetItem);//find函数可以如同之前vector一样定义范围=

if(it==List.end())

{/找不到数据/}

else {/找到数据/}

信息检索

List.size()//返回容器中实际数据的个数

List.front()//返回容器第一个元素

List.back()//返回容器最后一个元素

List.begin()//返回指向容器第一个元素的迭代器

List.end()//返回指向容器最后一个元素的下一个位置的迭代器

排序

List.sort();//已有类型排序

List.reverse();//把list的元素倒转
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stl