1,vector容器
1)初始vector
#include<vector>//使用vector容器需要包含此头文件
#include<algorithm>//使用STL标准库函数需要包含此头文件
void myprint(int val) {
cout << val << endl;
}
int main()
{
vector<int> v;
v.push_back(10);//尾插法插入数据
v.push_back(20);
v.push_back(30);
v.push_back(40);
vector<int>::iterator pbegin = v.begin();
vector<int>::iterator pend = v.end();
//第一种遍历方式
/*while (pbegin != pend) {
cout << *pbegin << endl;
pbegin++;
}*/
//第二种遍历方式
/*for (vector<int>::iterator it = v.begin(); it != v.end();it++) {
cout << *it << endl;
}*/
//第三种遍历方式
//使用STL提供的标准遍历算法 头文件 algorithm
for_each(v.begin(), v.end(), myprint);//我喜欢
}
2)vector的四种构造函数
//第一种构造
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
for_each(v1.begin(), v1.end(), print);
//第二种构造
vector<int>v2(v1);
for_each(v2.begin(), v2.end(), print);
//第三种构造
vector<int>v3(v1.begin(), v1.end());
for_each(v3.begin(), v3.end(), print);
//第四种构造
vector<int>v4(10, 100);//第一个表示个数,第二个表示数值
for_each(v4.begin(), v4.end(), print);
3)vector的三种赋值操作
函数原型:
vector& operator=(const vetctor &vec)//重载等号操作符
assign(beg,end)//将[beg,end)的值拷贝给本身
assign(n,elem)//将n个elem拷贝给本身
例:
vector<int>v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
//第一种赋值操作
vector<int>v2;
v2 = v1;
for_each(v2.begin(), v2.end(), print);
//第二种赋值操作
vector<int>v3;
v3.assign(10, 100);
for_each(v3.begin(), v3.end(), print);
//第三种赋值操作
vector<int>v4;
v4.assign(v1.begin(), v1.end());
for_each(v4.begin(), v4.end(), print);
4)vector容器的容量和大小的操作
empty()//判断是否为空
capacity()//容器的容量
size()//容器内元素的个数
resize(int num)//重新指定容器的长度为num,如果过长,则以默认值填充,如果过短,则删除超长部分
resize(int num,elem)//重新指定容器的长度为num,如果过长,则以elem填充,如果过短,则删除超长部分
5)vector容器的插入和删除
函数原型:
push_back(ele)//尾部插入元素
pop_back()//删除最后一个元素
insert(const_iterator pos,ele)//迭代器指向位置pos插入元素ele
insert(const_iterator pos,int count,ele)//迭代器指向位置pos插入元素count个ele
erase(const_iterator pos)//删除迭代器指定元素
erase(const_iterator start,const_iterator end)//删除从迭代器从start到end的元素
clear()//删除容器内所有元素
6)vector容器数据存取
at(int idx)//返回索引idx所指的数据
operator[]//返回索引[idx]所指的数据
front()//返回容器的第一个数据元素
back()//返回容器的最后一个数据元素
7)vector容器的互换
swap(vec)//交换两个容器的内容
小作用:可以达到内存收缩的效果
例:vector<int>v1;
for (int i = 0; i < 10000; i++) {
v1.push_back(i);
}
v1.resize(3);//重改容器后,容器的容量还是不变所以会造成内存的浪费
vector<int>(v1).swap(v1);//创建一个匿名对象,用swap交换后就不会造成内存浪费(匿名对象:编译器执行完这句代码后自动回收内存)
8)vector容器的预留空间
reserve(int len)//容器预留len个元素长度,预留位置不可初始化,元素不可访问
小作用:如果知道数据比较庞大,就可以一开始开辟这么多空间,不用等编译器开辟的空间满了在重新开辟
2,string 容器
1)string 容器四种初始化方式
int main()
{
//第一种
string str1 = "hello world";
cout << str1 << endl;
//第二种
const char* s1 = "hello world";
string str2(s1);
cout << str2 << endl;
//第三种
string str3(str2);
cout << str3 << endl;
//第四种
string str4(10, 'a');
cout << str4 << endl;
}
2)string 字符串拼接
函数原型:
string& operator+=(const char* str)//重载+=运算符
string& operator+=(const char c)//重载+=运算符
string& operator+=(const string& str)//重载+=运算符
string& append(const char* s)//把字符串s链接到当前字符串结尾
string&append(const char*s,int n)//把字符串s的前n个字符连接到当前字符串结尾
string&append(const string& s)//同operator+=(const string& str)
string&append(const string &s,int pos,int n)//字符串从pos开始的n个字符连接到字符串结尾
3)string 字符串的查找和替换
函数原型:
int find(const string& str,int pos=0)const//查找str第一次出现位置,从pos开始查找(c++版本)
int find(const char* s,int pos=0)const//查找s第一次出现位置,从pos开始查找(c版本)
int rfind(const string& str,int pos=npos)const//查找str最后一次位置,从pos开始查找
int rfind(const char* s,int pos=npos)const//查找s最后一次出现位置,从pos开始查找
string& replace(int pos ,int n, const string& str)//替换从pos开始n个字符为字符串str
string& replace(int pos ,int n,const char* s)//替换从pos开始的n个字符为字符串str
4)string 字符串的比较
函数原型:
int compare(const string &s) const//与字符串s比较(C++版本)
int compare(const char* s) const//与字符串s比较(c版本)
5)string 字符串中字符的存取
也可以通过这两种方式进行修改字符串的字符,只能修改一个字符
例:
string name = "abcdef";
//第一种通过[]访问字符串的每个字符
for (int i = 0; i < name.size(); i++) {
cout << name[i];
}
cout << endl;
//第二种通过at的方式访问字符串的每个字符
for (int i = 0; i < name.size(); i++) {
cout << name.at(i);
}
6)string 字符串的插入和删除
函数原型:
string& insert(int pos,const char* s)//插入如字符串
string& insert(int pos,int n,char c)//在pos位置后插入n个字符C
string& erase(int pos,int n=npos)//删除从pos开始的n个字符
例:
string str = "hello word";
str.insert(0, "aaa");
cout << str << endl;
str.erase(0, 3);
cout << str;
7)string 字符串的字串
函数原型:
string& substr(int pos,int n=npos)//返回从pos开始的n个字符
例:string eamil = "abc@defg";
int sz = eamil.find("@");
string name = eamil.substr(0, 3);
cout << name;