c++ STL总结

1.vector

 变长数组   
              头文件:#include<vector>   
              using namespace std;

1.1定义:

vector<typename> name; 
vector<int> name;
vector<double> name;
vector<node> name;//node是结构体类型
//如果typename也是一个STL容器,定义的时候>>符号之间要加上空格 即: vector<vector<int> > name;

vector<vector<int> > name;
//vector数组定义:
vector<typename> arrayname[size];
//arrayname[0]--arrayname[size-1]都是一个vector容器
//与vector<vector<typename> > name 不同的是,vector数组写法一维长度已经固定,另一维变化

1.2访问元素:

/*
两种访问方式:
*/
// 1.通过下标访问
vector<typename> vi;
//直接访问 vi[index] 即可

//2.通过迭代器访问:
vector<typename>::iterator it;
//通过 *it访问vector里的元素

vector<int> vi;
vector<int>::iterator it=vi.begin();
printf ( " % d  n " , *( it+1) );

//另一种写法
for( vector<int>::iterator it=vi.begin();it!=vi.end();it++){
        printf("%d",*it)

}
// begin()函数的作用是取vi的首元素地址,end()函数取尾元素地址的下一个地址
//只有vector和string中,才允许使用vi.begin()+n这中迭代器加证书的写法

1.3 常用函数:

// push_back()   ---------push_back(x)在vector后面添加一个元素x
for(int i=1;i<=3;i++){
    vi.push_back(i);
}

//  pop_back()        ------------删除vector的尾元素

//   size()           ---------------获得vector元素的个数
printf("%d
",vi.size());

//   clear()    ----------------清空vector中的所有元素

//    insert() ---------------- insert ( it , x ) 向vector的任意迭代器it处插入一个元素x
vi.insert(vi.begin+2,-1);

//     erase() ---------------删除单个元素或者删除一个区间内所有元素
vi.erase(it)// 删除迭代器为it处的元素
vi.erase(vi.begin()+3)

vi.erase(first,last) //删除【first,last)内所有元素
vi.erase(vi.begin()+1,vi.begin()+4);//删除 vi[1] vi[2] vi[3]

2.set 集合

内部自动有序 不含重复元素
头文件:#include using namespace std;

2.1 set的定义:

set<typename> name;
//同样,如果typename是STL容器,定义时在>>之间加空格

2.2 set内元素的访问—只能通过迭代器访问

set<int>::iterator it;
//通过*it来访问set元素

for(set<int>::iterator it=st.begin();it!=st.end();it++){
        printf("%d",*it)   //不能通过*(it+n)这种方法访问元素

}

2.3 set 常用函数

//   insert() ------insert(x) 将x插入set中,自动排序去重

//   find()  -------find(value)  返回set中对应值为value的迭代器
set<int> st;
for(int i=1;i<4;i++){
    st.insert(i);
}
set<int>::iterator it=st.find(2);//在set中查找2,并返回其迭代器
printf("%d",*it);
或者 printf("%d",*(st.find(2)));

//        erase() ---------- 删除单个元素  或者删除一个区间内所有元素
//1.删除单个元素  两种方法:st.erase(it) -it为删除元素的迭代器       st.erase(value) -value删除元素的值
st.erase(st.find(3));//结合find使用
st.erase(100);//100为set内元素的值
//2.删除一个区间内的所有元素    st.erase(first,last)  --first为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址
st.erase(st.find(1),st.end());

//       size()  - ------获得set内元素个数

//       clear() --------清空set中的元素

3 string

头文件:#include using namespace std;

3.1 string 的定义

string str;
string str="abcd";

3.2 string的访问

//  1.通过下标访问
string str="abcd";
for(int i=0;i<str.length();i++){
        printf("%c",str[i]);

}

//用c_str()将string转为字符数组

//    2.通过迭代器输出
string::iterator it;
for(string::iterator it=str.begin();it!=end();it++){
    printf("%c",*it);
}
//  只有string 和 vector  支持 str.begin()+n  迭代器加数字这种写法

3.3string 常用函数

//    两个string拼接
string str1="abc",str2="def";
string str3;
str3=str1+str2;
cout<<str3;
//    两个string直接用 == !=  < <= > >=比较大小-----按照字典序

//    length() /  size()   --返回string的长度

//    insert()  
1. insert(pos,string) ---在pos位置插入字符串string
str.insert(3,"ancsd");

2.insert(it,it2,it3)------it为原字符串的欲插入位置,it2 和it3为待插入字符串的首尾迭代器,用来表示串【it2,it3)将被插在it位置上
str.insert(str.begin()+3,str2.begin(),str2.end());

//           erase()
1.删除单个元素     erase(it) ---删除单个元素 it为需要删除元素的迭代器
str.erase(str.begin()+4);

2.删除一个区间内元素  erase(first,last) --删除【first,last) first last均为迭代器
str.erase(str.begin()+2,str.end());
erase(pos,length)--pos为开始删除的起始位置,length为删除的字符个数
str.erase(3,2)   ----删除3号位开始的2个字符


//          clear()  清空string中的数据


//           substr() ----------substr(pos,len) 返回从pos号位开始,长度为len的子字符串
str.substr(0,4);


//            find()   -----
1. str.find(str2) 当str2是str的子串时,返回其在str中第一次出现的位置,如果不是,返回string::npos
2. str.find(str2,pos)  从str的pos位置开始匹配str2,返回值与上面相同

//            replace()      
1. replace(pos,len,str2)  ----吧str从pos号位置开始,长度为len的子串替换为str2
2. replace(it1,it2,str2)------把str的迭代器【it1,it2)范围的子串替换为str2

4.map

映射 ,可以将任何基本类型映射到任何基本类型

头文件:#include using namespace std;
map会以键从小到大的顺序自动排序(set)也是,因为他们内部是用红黑树实现

4.1 map的定义

map<typename1,typename2> mp;    //第一个是键的类型,第二个是值的类型
map<string,int> mp;  //如果是字符串到整形的映射,必须使用string不能用char数组
//也可以是STL容器
map<set<int>,string> mp;

4.2 map内元素的访问

//  1.通过下标访问
map中的键是唯一的
map<char,int> mp;
mp['c']=20;
mp['d']=30;
printf("%d",mp['c']);

//     2.通过迭代器访问
map<typename1,typename2>::iterator it;
通过 it->frist 来访问键, 使用 it->second 访问值
mp['c']=20;
mp['d']=30;
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
    printf("%c %d
",it->first,it->second);

}

4.3 map常用函数

//   find() ------find(key)返回键为key的映射的迭代器
mp['c']=20;
mp['d']=30;
map<char,int>::iterator it=mp.find('b');
printf("%c %d",it->first,it->second);

//    erase() 
// 删除单个元素两种方法   
1.erase(it)--it为需删除元素的迭代器
mp['c']=20;
mp['d']=30;
map<char,int>::iterator it=mp.find('b');
mp.erase(it);
2.erase(key) --key为欲删除的映射的键
mp['c']=20;
mp['d']=30;
mp.erase('c');
//删除一个区间内的 所有元素
mp.erase(first,last) fisrt为删除区间起始迭代器,last为删除区间末尾迭代器的下一个地址
mp['c']=20;
mp['d']=30;
mp.erase(it,mp.end());

//   size() ---返回map中映射的对数

//   clear() -----清空map中的元素

5.queue

队列,先进先出的容器

头文件:#include using namespace std;

5.1 queue的定义:

queue<typename> name;

5.2 queue容器内元素的访问

// queue 先进先出    只能通过front来访问队首元素,通过back来访问队尾元素
queue<int> q;
for(int i=1;i<=5;i++){
    q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5
}
printf("%d %d",q.front(),q.back());

5.3 queue 常用函数

//     push() ----push(x)将x进行入队

//     front() back() 分别获得队首元素和队尾元素

//     pop()  ----令队首元素出队
queue<int> q;
for(int i=1;i<=5;i++){
    q.push(i);//push(i)将i压入队列,依次入队的是1 2 3 4 5
}
for(int i=1;i<=3;i++){
    q.pop()
}

//  empty()---检测queue是否为空,返回true则空,返回false则非空

//   size() ---返回queue内元素的个数

6.priority_queue

优先队列 底层用堆实现 队首元素一定是当前队列中优先级最高的一个

头文件:#include using namespace std;

6.1 priority_queue的定义

priority_queue<typename> name;

6.2 priority_queue 容器内元素的访问

优先队列没有front函数和back函数,只能通过top函数访问队首元素
q.push(3);
q.push(4);
printf("%d",q.top());

6.3priority_queue 常用函数

//    push() ----push(x)将x入队

//    top()   ----获得队首元素

//    pop() ------令队首元素出队

//    empty()  -----检测优先队列是否为空,空返回true,非空返回false
原文地址:https://www.cnblogs.com/nncurry/p/12758485.html