C++ STL的学习

目录

容器

string

头文件 #include

相应函数,以及测试代码

vector

#include

相应函数,以及测试代码

list

函数

函数验证

stack

函数

queue

函数


容器

string

头文件 #include<string>

相应函数,以及测试代码

#include<iostream>
#include<string>
using namespace std;
void test01()  //构造string 
{
//	string str1("hello world"); //string str1();创建空的字符串 
//	string str1(3,'a');
//  string str1="hello world";
//  string str="hello world",str1=str; 

//  string str1;
//  int n=2,start=3;
//  str1.assign("hello world",n);//将字符串的前n个字符赋值给str1; 
//  str1.assign("hello world",start,n);//从第start(指的是下标)个字符开始赋值n个字符; 
//	cout<<str1<<endl;
}
void test02()  //存取字符操作
{
	string str="hello world";
	cout<<str[1]<<endl;       //通过下标形式调用 
	cout<<str.at(1)<<endl;    //利用函数调用  
	 
	//可进行单个字符的修改; 
	str[1]='E';
	str.at(0)='H';
	cout<<str<<endl;
	
	//[ ]不会抛出异常,at 函数方法可以抛出异常
	try
	{
		//str[100]='A';
		str.at(100)='A';
	 } 
	 catch (exception &e)
	 {
	 	cout<<"捕获到异常:"<<e.what()<<endl; 
	 }
} 
void test03() //字符串拼接 
{
	string str1="hello",str2="world";
	int start=3,n=2;
	char a='k'; 
	//str1+=str2;                          //直接进行相加 
	//str1.append(str2,start,n);           //从第start个开始的n个字符连接到字符串后边 
    //str1.append(n,a);                    //在字符串后边,连接n个字符 a
	cout<<str1<<endl;
}
void test04()//查找替换
{
	string str1="http://www.zaomengxiyou.pojie.wudi.pojie.com" ;
	
	while(1)
	{
		int pos=str1.find("pojie");   //返回字符串第一次出现的位置 
		if(pos!=-1)
		{
			int n=5; 
			string str="***"; 
			str1.replace(pos,n,str);  //将str1,从pos位置开始的n个字符替换为str; 
		}
		else
		{
			break;
		}
	}
	cout<<str1;
} 
void test05() //字符串比较 
//与正常的数字比较相同可以使用> < == 
{      
	string str1,str2;
	cin>>str1>>str2;
	if(str1==str2)
	{
		cout<<"相等"<<endl; 
	 } 
	else if(str1>str2)
	{
		cout<<"大于"<<endl; 
	 } 
	else if(str1<str2)
	{
		cout<<"小于"<<endl; 
	 } 
}
void test06()//提取string 的子串
{
	string str1="hello,world,ni,hao,shi,jie";
	int pos=0;
	while(1)
	{
		int spa=str1.find(',',pos);
		if(spa<0)
		{
			
			string str=str1.substr(pos,str1.size()-pos);
			cout<<str<<endl;
			break;
		}
		else
		{
			int n= spa-pos;
			string str=str1.substr(pos,n);  //返回从pos开始的 n个字符组成的字符串 
			cout<<str<<endl;
		}
		pos=spa+1;
	}
} 
void test07()//插入 删除操作 
{
	string str1="hello world";
	int n=2; 
	str1.insert(n,"nihao"); //从str1的第n个位置插入字符串 
	
	cout<<str1<<endl;
	int pos=2,num=5;
	 str1.erase(pos,num); //从str1的第pos个位置开始删除num个字符 
	 cout<<str1<<endl;
}

int main()
{
	test08();
	return 0;
 } 

vector

#include<vector>

相应函数,以及测试代码

#include<iostream>
#include<vector>
using namespace std;
//定义
//vector<style> name;//eg:vector<int>a; 
void test00() //基础知识 
{
	vector<int> v;
	//利用push_back()函数尾插法输入 
	v.push_back(1);
	v.push_back(3);
	v.push_back(5);
	v.push_back(2);
	v.push_back(6);
	//遍历容器
	//定义一个迭代器iterator 保存起始迭代器
	vector<int>::iterator it=v.begin() ;
	for(;it!=v.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	//front()返回头元素
	//back()返回尾元素
	cout<<"头元素:"<<v.front()<<" 尾元素:"<<v.back()<<endl; 
}
void pvec(vector<int> &v)
{
	vector<int>::iterator it=v.begin();
	for(;it!=v.end();it++)
	{
		//*it==int 
		if(it==v.begin())
		cout<<*it;
		else
		cout<<" "<<*it;
	}
	cout<<endl;
 } 
void test01() //构造 
{
	//1  vector(begin,end)
	int a[10]={1,2,3,4,5,6};
	vector<int> vec(a,a+4); //将区间内的元素拷贝给vec 

	 pvec(vec);
	//2  vector(n,elem)   //将n个元素elem拷贝给vector 
	vector<int> vec1(2,13);
     pvec(vec1);
	 //3  vector(vector vec)   //将一个已经构造好的容器拷贝
	 vector<int> vec2(vec);
	pvec(vec2);
}

void test02() //赋值 
{
	vector<int> vec1,vec2,vec3,vec4;
	int a[10]={1,2,3,4,5,6};
	vec1.assign(a,a+6);
	pvec(vec1);
	//assign(begin,end)将区间内的元素赋值 
	vec2.assign(vec1.begin(),vec1.end());
	pvec(vec2);
	//assign(n,elem) 将n个elem赋值
	vec3.assign(3,14);
	pvec(vec3);
	//swap(vec) 将两个容器的元素交换
	vec2.swap(vec3);
	pvec(vec2);
	pvec(vec3); 
	
}
void test03() //大小操作 
{
	int a[]={1,2,4,6,3};
	vector<int> v(a,a+5);
	 cout<<v.capacity()<<endl;
	//size()元素个数
	cout<<v.size()<<endl;
	//empty()判断是否为空   ,为空返回1
	cout<<v.empty()<<endl;
	//resize(int num) 重新指定容器长度,若变短,删除超出长度的元素;若变长,以默认值(0)填充 
	v.resize(10);
	pvec(v); 
	cout<<v.capacity()<<endl;
	//resize(int num,elem) 重新指定容器长度,若变短,删除超出长度的元素;若变长,以elem填充
	v.resize(11,5);
	pvec(v);
	//capacity() 返回容器容量
	cout<<v.capacity()<<endl;
	//reserve(int len) 容器预留len个元素长度,没初始化时,不能访问 
	vector<int> v1;
	v1.reserve(1000);
	v1.assign(a,a+5);
	cout<<"容量:"<<v1.capacity()<<" 大小:"<<v1.size() <<endl; 
	//预留空间过大,通过以下方法可以压缩容器空间到实际大小 
	vector<int>(v1).swap(v1);
	cout<<"容量:"<<v1.capacity()<<" 大小:"<<v1.size() <<endl; 
}
void test04() //插入 删除 
{
	int a[]={1,2,4,6,3};
	vector<int> v(a,a+5);
	pvec(v);
	//insert(iterator pos,elem) 在pos位置插入元素elem 
	//insert(iterator pos,int count,elem) 迭代器指向位置pos插入count个元素elem
	//insert(iterator pos,begin,end) 在pos位置插入 区间[begin,end]的元素 
	//v.insert(v.begin()+2,9);
	//v.insert(v.begin()+2,3,9);
	v.insert(v.begin()+2,a,a+3);
	pvec(v); 
	// pop_back()删除最后一个元素
	v.pop_back();
	pvec(v); 
	//erase(iterator start,iterator end) 区间删除
	v.erase(v.begin()+2,v.begin()+5);
	pvec(v);
	//erase(iterator pos) 删除具体位置pos的元素
	v.erase(v.begin()+1);
	pvec(v); 
	//clear() 删除所有元素 //容量不变,大小变为0 
	v.clear();
	pvec(v); 
}
void test05() //进阶 
{
	vector <int>v1(5,1),v2(5,2),v3(5,3);
	
	//需求:定义一个vector容器存放v1,v2,v3;
	vector< vector<int> > v;
	 v.push_back(v1);
	 v.push_back(v2);
	 v.push_back(v3);
	 //遍历
	 vector<vector<int>>::iterator it=v.begin();
	 for(;it!=v.end();it++)
	 {
	 	//*it==vector<int>
	 	vector<int>::iterator mit=(*it).begin();
	 	for(;mit!=(*it).end();mit++)
	 	{
	 		cout<<*mit<<" ";
		 }
		 cout<<endl;
	  } 
 } 
int main()
{
	test04();
	return 0;
}

list

函数

//构造 
list<type>name;    //默认 
list(begin,end);   //将区间的中的元素拷贝 
list(n,elem);      //将n个elem拷贝 
list(list &l);     //直接将另一个容器拷贝
//插入,删除   //pos都是迭代器 
push_back(elem);   //在容器尾部插入 
push_front(elem);  //在容器首部插入 
pop_back();        //删除最后一个元素 
pop_front();       //删除第一个元素
insert(pos,elem);  //在pos位置插入元素elem ,调用后pos的位置会变为插入元素的下一个位置 
insert(pos,n,elem);//在pos位置插入n个元素elem,调用后pos的位置会变为插入元素的下一个位置  
insert(pos,begin,end); //在pos位置插入区间[begin,end]的元素,调用后pos的位置会变为插入元素的下一个位置  
clear();           //移除容器中的所有元素
//删除会使迭代器失效 
erase(begin,end);  //删除区间的数据,返回下一个数据的位置 
erase(pos);        //删除pos位置的数据,返回下一个数据的位置 
remove(elem);      //删除容器中所有与elem相匹配的元素
//赋值操作
assign(begin,end);                //将区间内的数据拷贝 
assign(n,elem);                   //将n个elem拷贝 
list &operator=(list &l);         //重载等号运算符 可以直接等于另一个容器进行赋值 
swap(list l);                     //交换两个容器的数据 
//大小操作
size();                 //返回元素个数 
empty();                //判断容器是否为空 
           //重新指定容器长度 
resize(num);             
resize(num,elem);
//数据存取
front();    //返回第一个元素 
back();     //返回最后一个元素 
//函数操作
reverse();   //反转,倒序 
sort();      //排序 



 

函数验证

#include<iostream>
#include<list>  
using namespace std;
//list迭代器可以自增,自减; 但不可加一个常数
void pl(list<int> &l)
{
	list<int>::iterator it=l.begin();
	for(;it!=l.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
 } 
 void test01()//构造 
 {
 	int a[]={1,2,3,4,5};
 	list<int>l(a,a+5);
 	pl(l);
 	list<int>l1(2,10);
 	pl(l1);
 	list<int>l2(l);
 	pl(l2);
  } 
void test02()//首尾插入删除 
{
	//list <type> name;//默认构造 
	list<int>l;
	//push_back()尾插
	//push_front()头插
	//pop_back()尾删
	//pop_front()头删
	l.push_back(1);
	l.push_back(2);
	l.push_front(3); 
	l.push_front(4);  
	pl(l);//4 3 1 2
	l.pop_back();
	pl(l);//4 3 1
	l.pop_front();
	pl(l);//3 1
	//front()返回第一个节点,不改变值
	cout<<l.front()<<endl;
	//back()返回最后一个节点的值 ,不改变值
	cout<<l.back()<<endl;
	//可以通过赋值改变首尾节点的值
	l.front()=10;
	l.back()=11;
	pl(l); //10 11
	 
 } 
 void test03()//内部插入删除 
 {
 	int a[]={1,2,3,4},b[]={9,8,7,6};
 	list<int>l1(a,a+4),l2(b,b+4);
 	pl(l1);pl(l2);
 	list<int>::iterator it=l1.begin(); 
 	l1.insert(++it,b,b+2);
 	pl(l1);
 	list<int>::iterator begin=l2.begin(),end=l2.end();
 	l2.erase(++begin,--end);
 	pl(l2);
 	l1.erase(it);
 	pl(l1);
 	l1.swap(l2);
	 pl(l1);
	 pl(l2);
	 cout<<l1.size()<<" "<<l2.size() <<endl;
	 l1.reverse();
	 pl(l1);
	 l2.sort();
	 pl(l2);
 }
 int main()
 {
 	test03();
 	return 0;
 }

stack

函数

#include<iostream>
#include<stack>
using namespace std;
void test01()//构造 
{
	//stack<type>name;默认构造 
	//stack(stack &st);将另一个容器复制 
	//stack &operator = (stack &st)//等号重载符 
}
void test02()//存取操作 
{
	//push(elem);//向栈顶添加元素 
	//pop();//从栈顶移除一个元素 ,不返回值 
	//top();//返回栈顶元素,不改变值 
}
void test03()//大小操作 
{
	//empty();//判断是否为空 
	//size(); //返回容器大小 
 } 
int main()
{
	return 0;
 } 

queue

函数

#include<iostream>
#include<queue>
using namespace std;
void test01()//构造 
{
	//queue<type>name;默认构造 
	//queue(queue &st);将另一个容器复制 
	//queue &operator = (queue &st)//等号重载符 
}
void test02()//存取操作 
{
	//push(elem);//向队尾添加元素 
	//pop();//从队头移除一个元素 ,不返回值 
	//front();//返回队头元素,不改变值 
	//back();//返回队尾元素,不改变值 
}
void test03()//大小操作 
{
	//empty();//判断是否为空 
	//size(); //返回容器大小 
 } 
int main()
{
	return 0;
 } 

长期更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值