STL总结笔记(实用 / 比赛)

1 STL总览

类型 容器名称 扩展
字符串 string
动态数组 vector
集合 set (有序、去重) multiset (有序、可重复)
unorderd_set(无序、去重)
关联容器
(键 - 值)
map (一对一、键有序) multimap (一对多)
unordered_map (一对一、键无序)
stack
队列 queue priority_queue (堆 / 优先队列:只能访问队首,即堆顶)
dequeue (双端队列:首尾都可插删)

2 string

2.1 方法

#include<string>

功能 方法
string str;
说明 举例
长度
str.length()
str.size()
插入
str.insert(pos, str2) 在str[pos]处开始插str2
s tr.insert(it1, it2, it3) it_:string::iterator 迭代器
在str的it1处插str2[it2,it3)
删除
str.erase(pos, len) 在str[pos]处开始 往后删,长度为len
str.erase(it) 删除it所指字符
str.erase(it1, it2) 删除str[it1,it2)
清空
str.clear()
取子串
str.substr(pos, len) 得到子串:str[pos]处开始,长度为len
str.substr(pos) 得到子串:str[pos]处开始,到str尾
查找
str.find(str2) 从str[0]开始查找…
str.find(str2, pos) 从str[pos]开始查找
成功:返回str2[0]在str的位置(下标)
失败:返回string::npos
if(str.find("a")!=string::npos){ //查找成功 }
替换
str.replace(pos, len, str2) 从str[pos]开始往后,长度为len的子串被替换为str2
str.replace(it1, it2, str2) str[it1, it2)的子串被替换为str2 str.replace(str.begin()+2, str.begin()+5,str2);
字符数组和string的转换
str.c_str() string转换为 常数 字符数组(不可变) printf("%s\n",str1.c_str());
//string用printf输出
str = 字符数组 字符数组转换为string char chs[5] = "abcd";
str = chs;
string转换为int / double
int = stoi(string)
double = stod(string)
int / double转为string #include<sstream> int a;
stringstream ss;
ss<<a;
string s = ss.str();

2.2 代码示例

#include<cstdio>
#include<string>

using namespace std;

int main(){
   
    /*
    初始化
    */
    string str;


    /*
    遍历
    */
    // 下标法
    for(int i=0; i<str.length(); i++){
   
        printf("%c",str[i]);
    }
    // 迭代器第 1 种
    for(string::iterator it=str.begin(); it!=str.end(); it++){
   
        printf("%c",*it);
    }
    // 迭代器第 2 种
    string::iterator it=str.begin();
    for(int i=0; i<str.length(); i++){
   
        printf("%c",*(it+i));	// string/vector :可以it+i
    }


    return 0;
}

2.3 注意事项

(1)
存储字符串,C和C++(STL)的区别:

// c
char name[5] = "abcd";		//存储: 4个字符 + ‘\0’

// c++
string name = "abcd"	//没有'\0',可存中文

(2)关于迭代器
只有string和vector才能用:下标访问
只有string和vector才能用:it+i

如:str.begin()+2 (str[2])、 str.end()-1 (str[str.length()-1],最后一个元素)


3 vector

3.1 方法

#include<vector>

功能 方法
vector vect;
说明 举例
长度
vect.size()
插入
vect.push_back(x) 最后位置插入元素x
vect.insert(it, x) 在迭代器 it 所指位置插入x
删除
vect.pop_back() 删除最后一个
vect.erase(it) 删除vect[it]
vect.erase(it1, it2) 删除vect[it1, it2)
清空
vect.clear()
复制(深拷贝)
初始化时 vector<int> A;
vector<int> B(A)
vect.assign() B.assign(A.begin(), A.end());

3.2 代码示例

#include<cstdio>
#include<vector>

using namespace std;

struct Student{
   
	int age;
	char name[10];
};

int main(){
   
    /*
    初始化
    */
    // 一维数组
    vector<int> vect1_1;
    vector<int> vect1_2(10);      //数组大小=10, 默认值vect[i]=0
    vector<int> vect1_3(10,2);    //数组大小=10, 默认值vect[i]=2
    vector<Student> vect1_4;
    // 二维数组
    vector<vector<int> > vect2_1;	//行列均不定
    vector<vector<int> > vect2_2(3, vector<int>(10, 2));	//数组大小=3*10, 默认值vect[i]=2
    vector<int> vect2_3[10];		//列固定


    /*
    遍历:一维,同string
    */
    // 下标法
    // 迭代器第 1 种
    // 迭代器第 2 种


    /*
    遍历:二维
    */
    // 下标法
    for(int i=0; i
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值