Vector向量容器
Vector向量容器不仅能像数组那样对元素进行随机访问,而且可以在尾部插入元素,具有对内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间。
向量的元素类型可以是int,double,char等简单类型,也可以是结构体或string基本字符序列容器。下面仅举int型和string型的例子,其他类型的都差不多,一样。
#include<vector>
创建vector向量:vector<int>name(或name(元素数)或name(元素数,初值))
Name.push_back(值)---------------尾部插入元素
访问元素的方式:1)Name[2]------像数组一样访问元素
2)用迭代器访问
定义迭代器:vector<int>::iterator it;
用迭代器遍历元素:for(it=name.begin();it!=name.end();it++){cout<<*it<<” ”} cout<<endl;
插入元素:insert(哪个下标前,值) 如name.insert(v.begin(),7);
删除元素:1)erase(起始点,终止点),如name.erase(name.begin(),name.begin()+1)或name.erase(name.begin());2)clear()-------------一次性全部删除vector中的元素,如name.clear()
向量的大小:1)name.size()-----------返回元素的个数 2)name.empty()------判断向量是否空
排列向量容器的元素
#include<algorithm>
有两种方式:1)reverse(name.begin(),name.end())-----------反向排列(从大到小)
2)sort(name.begin(),name.end())----------从小到大排列
3)自定义排序方式
sort(name.begin(),name.end(),cmp)---------------其中cmp是自己定义的,如
bool cmp(const int &a, const int &b){return(a>=b);}-------从大到小排序,注意其中const作用是确保函数操作的对象值不被改变 &表示是传地址方式
string基本字符系列容器
#include<string>
创建String s=”hello C++”; 或#include<vector> vector<string> s-----可以应用vector的一些方法像s.push_back(“Jack”);
尾部追加字符:1)S+=”!”;2)s.append(“123”);
插入字符 s.insert(s.begin(),’p’);
删除字符串string:1)清空一个字符串,直接给它赋空字符串即可 2)使用erase()删除迭代器所指的那个元素或一个区间中的所有元素,如s.erase(s.begin(),s.begin()+3)
长度大小 -----s.length() 是否为空----------s.empty()
子串替换 s.replace(3,3,”world”);---(起始点,长度,替换的字符串)
寻找子串:s.find(“world”)---返回下标值
比较------s.compare(“hello”)----相等返回0,大返回1,小返回-1
排序问题
同上面所述,reverse(s.begin(),s.end()) sort(s.begin(),s.end(),cmp)
string类型的应用C 中的printf()输出,应这样printf(s.c_str());
sscanf(“abc 123 cde”,”%s %s %s”,s1,s2,s3)-----------给s1,s2,s3分别赋值为abc,123,cde
重点重点重点
String对象与数值相互转换函数
#include<iostream>
#include<string>
#include<sstream>(这个头文件很重要)
using namespace std;
/*数值转换为string*/
string convertToString(double( or int and soon) x){
ostringstream s;
if(s<<x)return s.str();
return “conversion error”;
/*string转换为数值*/
Double(or int and so on) convertFromString(const string &s){
istringstream i(s);
double x;
if(i>>x)return x;
return 0.0;
}