c++stl库使用总结

本文详细介绍了C++ STL中的迭代器使用、string容器、vector容器、deque容器、Stack栈容器、Queue队列、list链表、set容器、map容器等核心组件的使用方法和常见操作,包括构造、赋值、插入、删除、查找、比较等。通过实例代码演示了如何在实际编程中应用这些容器,帮助读者深入理解C++ STL。
摘要由CSDN通过智能技术生成

1.迭代器的总结

原生指针其实也是一种迭代器

//原生指针也是迭代器
void test01()
{
    int arr[5] = { 1, 2, 3, 4, 5 };

    int * p = arr;

    for (int i = 0; i < 5;i++)
    {
        //cout << arr[i] << endl;
        cout << *(p++) << endl;
    }
}

int main()

{

        test01();
}

1.2迭代器的用法

vector<int>v; //创建一个vector容器,容器中存放元素类型是int类型

//插入元素
v.push_back(10);
v.push_back(30);
v.push_back(20);
v.push_back(40);

//遍历元素
vector<int>::iterator  itBegin = v.begin(); //v.begin() 起始迭代器,指向容器中第一个数据

vector<int>::iterator  itEnd = v.end(); //v.end();结束迭代器,指向的是容器中最后一个元素的下一个位置


//第一种遍历
while (itBegin!=itEnd)
{
    cout << *itBegin << endl;
    itBegin++;

}

//第二种遍历
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
    cout << *it << endl;
}

 //第三种便利

void myPrint(int val)
{
    cout << val << endl;
}

for_each(v.begin(), v.end(), myPrint);

自定义类型迭代器遍历 

//自定义数据类型
class Person
{
public:
    Person(string name, int age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
    string m_Name;
    int m_Age;
};

//自定义累类型

void test03()
{
    vector<Person> v;

    Person p1("aaa", 10);
    Person p2("bbb", 20);
    Person p3("ccc", 30);
    Person p4("ddd", 40);
    Person p5("eee", 50);

    v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);
    v.push_back(p5);

    //每个容器都有自己专属的迭代器
    for (vector<Person>::iterator it = v.begin(); it != v.end();it++)
    {
        // *it  ===  Person
        cout << "姓名: " << (*it).m_Name << " 年龄: " << it->m_Age << endl;
    }
}

2.string容器使用介绍

string 构造函数
string();//创建一个空的字符串 例如: string str;
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n个字符c初始化 

string基本赋值操作
string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符赋值给当前的字符串
string& assign(const char *s);//把字符串s赋给当前的字符串
string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);//把字符串s赋给当前字符串
string& assign(int n, char c);//用n个字符c赋给当前字符串
string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串

string插入和删除操作
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符c
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符

string比较操作
compare函数在>时返回 1,<时返回 -1,==时返回 0。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的A比小写的a小。

int compare(const string &s) const;//与字符串s比较
int compare(const char *s) const;//与字符串s比较


string子串
string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串

string查找和替换
int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const;  //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;  //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;  //查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s

string拼接操作
string& operator+=(const string& str);//重载+=操作符
string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=()
string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加n个字符c

2.1代码例子

void test01()
{
    string str;
    string str2(str);

    string str3 = "abc";

    string str4(10, 'a');

    cout << "str3 = " << str3 << endl;

    cout << "str4 = " << str4 << endl;

}


//赋值
void test02()
{
    string  str;
    str = "abc";

    str.assign("abcde", 3);

    cout << str << endl;


    string str2;
    str2.assign(str);
    cout << str2 << endl;

    //string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串

    str2.assign(str, 0, 2);
    cout << str2 << endl;

}

void test03()
{
    string str = "hello world";

    //for (int i = 0; i < str.size();i++)
    //{
    //    //cout << str[i] << endl;
    //    cout << str.at(i) << endl;
    //}

    //[]和at区别,[]访问越界 直接挂掉 , at访问越界  抛出out_of_range异常

    try
    {
        //cout << str[100] << endl;
        cout << str.at(100) << endl;
    }
    catch (out_of_range & e)
    {
        cout << e.what() << endl;
    }
    catch (...)
    {
        cout << "异常捕获" << endl;
    }

}

void test04()
{
    //拼接
    //string str1 = "我";
    //string str2 = "爱北京";

    //str1 += str2;
    //cout << str1 << endl;

    //str1.append("天安门");
    //cout << str1 << endl;

    //查找
    string str = "abcdefgde";

    int pos =  str.find("de");
    //rfind 是从右往左查找
    if (pos == -1)
    {
        cout << "未找到字符串" << endl;
    }
    else
    {
        cout << "找到了字符串,位置为: " << pos << endl;
    }
    
    //替换
    //string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
    str.replace(1, 3, "11111");
    //a11111efgde
    cout << str << endl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值