C++的标准模板库(STL)主要由三个组件构成:1、容器;2、迭代器;3、泛型算法
一、容器
对容器的通用型操作: "==", "!=" 判断两个容器是否相等 "=" 将一个容器复制给另一个容器 .empty() 判断是不是空的,有没有元素 .size() 返回容器内元素的个数 .clear() 删除容器内所有元素
-
array 数组array,最一般的数组,和C的数组一样,长度固定,声明如下: #include<array>
array<int, 10> arr;
-
vector vector,相当于动态数组,用的最多最方便,长度可以随时扩充: #include<vector>
vector<double> Vet;
vector<int> Vet1(10);
Vet1.push_back(5);
Vet1.pop_back();
-
deque 也是个线性表,和vector类似,不过是双向的,可以在前端插入和删除 #include<deque>
deque<double> Var1;
Var1.push_front(6);
Var1.pop_front();
-
list 双向链表,不是线性表,存储的内容不是在连续的内存上,每个节点都有一个value和两个指针back, front分别只想前面和后面的节点; -
set 集合,只有key #include<set>
#include<string>
set<string> word_set;
word_set.count(key);
-
map 键值对key/value key通常是字符串,相当于索引; 有.find(key)成员函数,返回查找的key的iterator,否则返回map.end() #include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<string,int> words;
string word;
while(cin>>word)
words[word]++;
map<string,int>::iterator it=words.begin()
for(;it!=words.end();it++)
cout<<"key: "it->first<<" value: "<<it->second<<endl;
return 0;
}
二、迭代器iterator(泛型指针)
类似于指针,作用于容器类上
-
.begin() 相当与头指针,指向第一个元素的指针 -
.end() 指向最后一个元素的后面 的指针 vector<int> Var{4,5,7,8};
vector<int>::iterator head=Var.begin();
vector<int>::iterator tail=Var.end();
for(;head!=tail;head++)
{
cout<<*head<<endl;
}
三、泛型算法Generic Programming
-
insert() 插入
iterator insert(itrator position, elemType value);
void insert(iterator position, int count, elemType value);
void insert(iterator position, iterator first, iterator last);
-
erase() 删除
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
-
find() 用于无序搜索,搜素范围[first, last), 返回iterator, 找不到则返回last iterator find(iterator first, iterator last, elemType findvalue);
-
copy() 复制
copy(iterator first, iterator last, iterator To_first);
vector<int> ivet;
vector<int> temp{1,2,3,4,5};
copy(temp.begin(), temp.end(), ivec.begin());
#include<vector>
#include<deque>
#include<list>
#include<string>
using namespace std;
int main()
{
list<string> slist;
vector<int> ivec;
list<int> ilist(100);
vector<string> svec(32);
vector<int> ivec(10,1);
list<string> slist(16,"WoW");
int arr[8]={1,1,2,2,3,5,6,4};
vector<int> ivec1(ia,ia+8);
int a=ivec1.front();
a=ivec1.back();
ivec1.push_back(10);
ivec1.pop_back();
list<string> slist1(5,"wfq");
list<string> slist2(slist1);
return 0;
}
|