随心成长记9(c++容器vector,string)

本文详细介绍了C++中的两种重要容器——vector和string。内容包括vector的初始化、赋值、遍历、容量调整、插入删除操作,以及string的初始化、拼接、查找替换、存取和插入删除等基本操作,深入理解了这两个容器的使用方法。
摘要由CSDN通过智能技术生成

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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噌105

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值