C++标准模板库(STL)(一)

vector (向量)

添加头文件

#include<vector>
using namespace std;

定义

	vector<typename> name;
	vector<typename> name[100];
	vector<vector<typename> > name; 

迭代器

	vector<typename>::iterator it;

添加元素

//依次在vi末尾添加1,2,3,4,5 
	for(int i=1;i<=5;i++){
		vi.push_back(i);
	}

访问元素

	for(int i=0;i<vi.size();i++){
		printf("%d ",vi[i]);
	} 
//常用STL容器中,只有vector和string中允许使用迭代器加上整数的写法
	it=vi.begin();
	for(int i=0;i<vi.size();i++){
		printf("%d ",*(it+i));
	}
//end()是取尾元素的下一个地址,作为迭代器末尾标志,不储存任何元素
	for(vector<int>::iterator it=vi.begin();it!=vi.end();vi++){
		printf("%d ",*it);
	}

1 2 3 4 5

插入元素

	vi.insert(vi.begin()+2,-1);

1 2 -1 3 4 5

删除元素

//删除vector的尾元素
	vi.pop_back();

1 2 -1 3 4

//erase(it)即删除迭代器为it处的元素
	vi.erase(vi.begin()+2);

1 2 3 4

//erase(first,last)即删除[first,last)内的所有元素
	vi.erase(vi.begin()+1,vi.end()-1);

1 4

清空元素

	vi.clear();

set (集合)

头文件

#include<set>
using namespace std;

定义

	set<typename> name;
	set<set<typename> > name;
	set<typename> name[100];

迭代器

	set<int>::iterator it;

插入元素

//自动递增排序,且自动去除重复元素
	st.insert(3);
	st.insert(5);
	st.insert(2);
	st.insert(3);

访问元素

	for(set<int>::iterator it=st.begin();it!=st.end();it++){
		printf("%d ",*it);
	}

2 3 5

查找元素

//find(value)返回set中对应值为value的迭代器
	it=st.find(2);
	printf("%d",*it);

2

删除元素

//erase(it),it 为所需删除元素的迭代器
	st.erase(st.find(3));

2 5

//erase(value),value为所需删除元素的值
//初始元素 2 3 5
	st.erase(3);

2 5

//erase(first,last)即删除[first,last)内的所有元素
//初始元素 2 3 5
	st.erase(st.begin(),st.end());

清空元素

	st.clear();

string(字符串)

头文件

#include<iostream>
#include<string>
using namespace std;

定义

	string str="abcd";
	string::iterator it;//string不像其他STL容器那样需要参数

访问元素

	for(int i=0;i<str.length();i++){
		printf("%c",str[i]);
	}

abcd

//读入和输出整个字符串,只能用cin和cout
//cin和cout都在iostream头文件中,而不是stdio.h
	string str;
	cin>>str; 
	cout<<str<<endl;

abcd
abcd

//用c_str()将string类型转换为字符数组进行输出
	string str="abcd";
	printf("%s\n",str.c_str()); 

abcd

	string str="abcd";
	for(string::iterator it=str.begin();it!=str.end();it++){	//string同vector一样支持直接对迭代器进行加减某个数字
		printf("%c",*it);
	}

abcd

常用函数

//拼接
	string str1="abc",str2="xyz",str3;
	str3=str1+str2;
	str1+=str2;
	cout<<str1<<endl;
	cout<<str3<<endl;

abcxyz
abcxyz

//比较 规则为字典序
	string str1="aa",str2="aaa",str3="abc",str4="xyz";
	if(str1<str2)
		printf("aa<aaa\n");
	if(str1!=str3)
		printf("aa!=abc\n");
	if(str4>=str3)
		printf("xyz>=abc\n");

aa<aaa
aa!=abc
xyz>=abc

//返回长度
	string str="abcxyz";
	printf("%d %d",str.length(),str.size());

6 6

插入元素

//insert(pos,string) 在pos号位置插入字符串string 
	string str1="abcxyz",str2="opq";
	str1.insert(3,str2);
	cout<<str1<<endl;

abcopqxyz

//insert(it,it1,it2) it为原字符串的欲插入位置 it1和it2为待插字符串的首尾迭代器 表示串[it1,it2)将被插在it的位置上
	string str1="abcxyz",str2="opq";
	str1.insert(str1.begin()+3,str2.begin(),str2.end());
	cout<<str1<<endl; 

abcopqxyz

删除元素

//erase(it) 删除单个元素 it为需删除元素的迭代器 
	string str="abcxyz";
	str.erase(str.begin()+3);
	cout<<str<<endl;

abcyz

//erase(first,last) 删除[first,last)
	string str="abcxyz";
	str.erase(str.begin()+2,str.end()-1);
	cout<<str<<endl;

abz

//erase(pos,length) pos为删除的起始位置,length为删除的字符个数 
	string str="abcxyz";
	str.erase(2,3);
	cout<<str<<endl;

abz

返回子串

//substr(pos,length) 为返回从pos位开始长度为length的子串
	string str="Thank you for your smile.";
	cout<<str.substr(6,3)<<endl; 

you

查找

	string str="Thank you for your smile.";
	string str1="you",str2="me";
//str.find(str1) str1为str的子串时,返回其在str中第一次出现的位置 ,若不是,返回string::npos 
	if(str.find(str1)!=string::npos){	//string::npos是unsigned_int类型常数,值为-1,作为find函数失配的返回值
		cout<<str.find(str1)<<endl;
	}
	if(str.find(str2)!=string::npos){
		cout<<str.find(str2)<<endl;
	}
	else
		cout<<"I know there is no position for me."<<endl;
//find(str1,pos) 为从str的pos位开始匹配str1
	if(str.find(str1,7)!=string::npos){
		cout<<str.find(str1,7)<<endl;
	} 

6
I know there is no position for me.
14

替换

	string str="Maybe you will turn around.";
	string str1="will not",str2="surely";
//replace(pos,length,str1)将str从pos开始长度为length的子串替换为str1
	cout<<str.replace(10,4,str1)<<endl;
//replace(it1,it2,str2)将str迭代器[it1,it2)之间子串替换为str2
	cout<<str.replace(str.begin(),str.begin()+5,str2)<<endl; 

Maybe you will not turn around.
surely you will not turn around.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值