目录
容器
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;
}
长期更新