C++的STL库(vector&string的用法)
STL是C++标准库的一个重要组成部分,它实现了常用的数据结构和算法。STL由算法,容器,迭代器,适配器,仿函数(函数对象),空间适配器六大部件组成。STL容器首先是一个模板类,通过在类中实现对数据的操作,而包含这样的类的实现就叫做一个容器。STL包含了许多容器,包括:向量(vector),列表(list),队列(queue),双端队列(deque),优先队列(Priority queue),..
STL是C++标准库的一个重要组成部分,它实现了常用的数据结构和算法。STL由算法,容器,迭代器,适配器,仿函数(函数对象),空间适配器六大部件组成。STL容器首先是一个模板类,通过在类中实现对数据的操作,而包含这样的类的实现就叫做一个容器。
STL包含了许多容器,包括:向量(vector),列表(list),队列(queue),双端队列(deque),优先队列(Priority queue),集合(set),多重集合(multiset),映射(map),多重映射(multimap)ng
STL的算法是通用的,并不依赖于特定的数据结构和对象。
一、C++ vector的用法
vector容器可以容纳多种类型的数据,vector是C++STL的一个重要成员。需要包含头文件:
#include<vector>
1、vector 的初始化:
(1)vector<int> a(10);//定义了10个整型元素的容器a
(2)vector<int> a(10,1);//定义了10个整型元素的容器,都初始化为1
(3)vector<int> a(b);//用容器b初始化容器a
(4)vector<int> a(b.begin(),b.begin()+3);//将b容器的前三个元素赋值给a容器
(5)int b[5]={2,4,3,1,5,4};
vector<int>a(b,b+7);//用数组对容器进行初始化
2、vector对象的几个重要操作
(1)a.assign(b.begin(),b.begin()+3);//将b的前三个元素赋给容器a
(2)a.assign(4,2);a含4个元素,每个元素均为2
(3)a.back();返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i];//返回第i+1个元素
(6)a.clear();//清空a的元素
(7)a.empty();//判断a容器是否为空,若为空,则返回true,若不为空,则返回false
(8)a.pop_back();//删除a容器的最后一个元素
(9)a.erase(a.begin(),a.begin()+3);//删除容器a的前三个元素
(10)a.push_back(5);//在a的最后一个元素后添加元素5
(11)a.insert(a.begin()+1,5);//在容器a的第二个元素的位置处插入一个元素,值为5
(12)a.insert(a.begin()+1,3,5);//在容器a的第二个元素的位置插入3个5
(13)a.insert(a.begin(),b+3,b+6);//在容器a的首位置添加3个元素(从b容器的第四个元素到第6个元素,不包括第七个元素)
(14)a.size();//返回a中元素的个数
(15)a.capacity();//返回a在内存中可以容纳的元素的个数
(16)a.resize();//将a元素的个数限制到10个,多余的则进行删除,缺少的按随机值进行补充
(17)a.swap(b);//将容器b中的所有元素与a容器进行交换
(18)a==b;a!=b;a>=b;//a和b均为向量容器
3、访问vector的方法
1)添加元素
1.向容器中添加元素
vector<int> a;
for(int i=0;i<5;i++)
a.push_back(i);
2.利用数组进行添加元素
int a[5]={1,34,5,6,7};
vector<int> b;
for(int i=2;i<4;i++)
b.push_back(a[i]);
3、从现有的向量中选择一部分元素添加
int a[5]={2,3,5,6,7};
vector<int> b;
vector<int> c(a+1,a+4);
for(vector<int>::iterator iter=c.begin();iter<c.end();iter++)
b.push_back(*iter);
4、从已有的文件中读取元素添加到容器中
ifstream in("data.txt");
vector<int> a;
for(int i;in>>i)
a.push_back(i);
2)从vector容器中读取元素
1.通过坐标形式进行访问
int a[5]={2,3,4,5,6};
vector<int> b(a,a+3);
for(int i=0;i<b.size();i++)
cout<<b[i];
2.通过迭代器访问
int a[5]={2,3,4,5,6};
vector<int> b(a,a+3);
for(vector<int>::iterator iter=b.begin();iter!=b.end();iter++)
cout<<*iter<<" ";
4、几种经常使用的算法(包含头文件 #include<algorithm>)
1、sort(a.begin(),a.end()); //对容器中的元素从大到小进行排序
2、reverse(a.begin(),a.end()); //对容器中的元素进行逆置
3、copy(a.begin(),a.end(),b.begin()+1) //将容器a中的元素复制到容器b中,从第二个元素的位置开始进行覆盖
4、find(a.begin(),a.end(),10); //在容器a中寻找元素10,并返回其在容器中的位置
二、STL的string用法
C语言提供的字符数组容易造成字符丢失和数组越界的问题,而c++则提供了string类,string类长度任意,包含了一些常用的成员函数,而且可以和字符数组之间相互的转换:
1)可以直接用数组来初始化字符串
char a[10];
string s=a;
2)可以利用copy函数将字符串s中的元素拷贝到数组a中
使用string类时,要先加头文件
#include<string>
using namespace std;
1、为string赋值,进行初始化
(1)string s;//不进行初始化
(2)string s="csdn"; //将s初始化为"csdn"
string s("csdn");
string s(3,"csdn"); //将s初始化为3个csdn的字符串
(3)stirng s=s1; //将s1拷贝给s
(4)用字符数组进行赋值
char a[10];
scanf("%s",a);
string s=a;
(5)输入赋值
string s;
cin>>s;
2、string常用的成员函数
1.
(1)size() //返回字符串的尺寸大小,以byte为单位衡量
(2)length() //返回字符串的长度
(3)empty() //判断字符串是否为空,为空则返回true,否则返回false
(4)clear() //清空字符串
(5)resize() //重新设置字符串的长度大小,过长时进行截断,长度不够时,也可进行指定字符的填充
s.resize(n,'c');
2.访问字符元素
(1)s[i]
(2)back() //返回最后一个元素的引用,s.back()='a'
(3)front() //返回第一个元素的引用
(4)at(i) //返回第i各元素的引用
3.进行字符元素的修改
(1)insert插入元素
s.insert(3,str); //在s的第三个元素位置处插入字符串str
s.insert(5,3,"a") //在s的第五个元素位置处插入3个a字符
(2)erase删除元素
s.erase(a,b);//删除[a,b]之间的元素
(3)replace替换元素
s.replace(5,3,str); //将字符串s中从第五个字符往后数3个字符 被str的值所覆盖
(4)+=:在字符串末尾添加元素
s+=str;
s.append("csdn"); //在s末尾追加“csdn”
(5)s.push_back(i); //将元素i添加到字符串a后
(6)s.pop_back(); //删除末尾元素
(7)s.swap(str); //交换s和str字符串
4、比较两字符串的大小compare
str1.compare(str2); //比较两字符串,相同则返回1,不同则返回0
5、find()函数:在字符串中寻找子字符串,返回的是查找到的第一个子串的位置,未找到时返回string::npos(无符号整型)
rfind():返回的是找到的最后一个子串的位置
unsigned int found=s.find(str);
if(found!=string::npos)
cout<<"the first position is"<<found<<endl;
6、substr(); //裁剪字符串,返回裁剪后的内容,不影响原裁剪字符串的内容
substr(a,b);//裁剪a至b之间的元素
substr(n); //裁减掉n之后的元素
7、copy()函数:将字符串拷贝到字符数组中
s.copy(str,6,5); //从第五个字符开始,拷贝6个字符到str数组中
更多推荐
所有评论(0)