c++中string和vector的详细介绍

 更新时间:2022年09月21日 14:23:50   作者:米兰的小红黑  
这篇文章主要介绍了c++中string和vector的详细介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

知识点1【STL的概述】

STL(Standard Template Library,标准模板库)
STL的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。
算法操作数据,容器存储数据,迭代器是算法操作容器的桥梁,迭代器和容器一一对应。

STL六大组件:

容器 算法 迭代器 仿函数 适配器 空间配置器
容器:存放数据
算法:操作数据
迭代器:容器和算法的桥梁
仿函数:为算法提供更多的策略
适配器:为算法提供更多的参数接口
空间配置器:管理容器和算法的空间

算法的分类:

质变算法:是指运算过程中会改变区间元素的内容。例如拷贝,替换,删除等。
非质变算法:是指运算过程中不会区间的元素内容,例如查找、计数、遍历、寻找极值。

迭代器的分类:

知识点2【迭代器的案例】

案例:容器vector

#include <iostream>
#include <vector>
#include<algorithm>

void myPrintInt(int num);
using namespace std;

void test01(){

    //单端动态数组vector类模板
    vector<int> arr(0);
    //push_back()尾部插入数据
    arr.push_back(100);
    arr.push_back(200);
    arr.push_back(300);
    arr.push_back(400);

    //访问数据
    //定义一个迭代器存储arr的起始迭代器
    vector<int>::iterator beginIt = arr.begin();
    //定义一个迭代器存储arr的结束迭代器
    vector<int>::iterator endIt = arr.end();

    //for循环遍历1
    for(vector<int>::iterator i = beginIt; i != endIt; i++){
        //对迭代器取* 代表的是 容器的元素
        //*biginIt
        cout << *i << " ";
    }
    cout << endl;
    //for循环遍历2(推荐)
    for(vector<int>::iterator beginIt = arr.begin(); beginIt != arr.end();beginIt++){
        cout << *beginIt << " ";
    }
    cout << endl;

    //STL提供的算法来遍历容器(包含算法头文件algorithm)
    //for_each从容器的起始--->结束,逐个元素取出
    //myPrintInt容器数据的打印方式
    for_each(arr.begin(),arr.end(),myPrintInt);

}

void myPrintInt(int num){
    cout << num << " ";
}

int main(int argc, char *argv[])
{
    test01();
    return 0;
}

运行结果:

案例2:容器存放自定义数据类型

#include <iostream>
#include <vector>
#include<algorithm>
#include <string.h>

using namespace std;

class Person{
    friend void myPrintInt1(Person &ob);
private:
    string name;
    int age;
public:
    Person(string name,int age){
        this->name = name;
        this->age = age;
    }
};

void myPrintInt1(Person &ob){
    cout << ob.age << " " << ob.name << endl;
}

void test02(){
    vector<Person> arr;
    Person p1("tom",15);
    arr.push_back(p1);
    arr.push_back(Person("davi",16));
    arr.push_back(Person("mary",17));
    arr.push_back(Person("peter",18));
    for_each(arr.begin(),arr.end(),myPrintInt1);
}


int main(int argc, char *argv[])
{
    test02();
    return 0;
}

运行结果:

案例3:容器嵌套容器

void test03(){
    vector<int> v1;
    vector<int> v2;
    vector<int> v3;
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);

    v2.push_back(100);
    v2.push_back(200);
    v2.push_back(300);
    v2.push_back(400);

    v3.push_back(1000);
    v3.push_back(2000);
    v3.push_back(3000);
    v3.push_back(4000);

    vector< vector<int>> v4;
    v4.push_back(v1);
    v4.push_back(v2);
    v4.push_back(v3);

    for(vector<vector<int>>::iterator it = v4.begin(); it != v4.end(); it++){
        for(vector<int>::iterator mit = (*it).begin(); mit != (*it).end();mit++){
            cout << (*mit) << " ";
        }
        cout << endl;
    }

}

运行结果:

知识点3【string类】

1、案例:string的构造和赋值

#include <iostream>
#include <string.h>

using namespace std;
/*
3.1.2.1 string 构造函数
string();//创建一个空的字符串 例如: string str;
string(const string& str);//使用一个 string 对象初始化另一个 string 对象
string(const char* s);//使用字符串 s 初始化
string(int n, char c);//使用 n 个字符 c 初始化
3.1.2.2 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 个 字符赋值给字符串
*/

void test01(){
    //string(const char* s);//使用字符串s初始化
    string str1 = "hello";
    cout << str1 << endl;

    //string(int n, char c);//使用n个字符c初始化
    string str2(10,'H');
    cout<<str2<<endl;//"HHHHHHHHHH"
}
int main(int argc, char *argv[])
{
    test01();
    return 0;
}

到此这篇关于c++中string和vector的详细介绍的文章就介绍到这了,更多相关c++ string和vector内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++的友元和内部类你了解吗

    C++的友元和内部类你了解吗

    这篇文章主要为大家介绍了C++的友元和内部类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C++ Qt实现浏览器网页内嵌的音视频播放器

    C++ Qt实现浏览器网页内嵌的音视频播放器

    这篇文章主要为大家详细介绍了如何利用C++ Qt实现浏览器网页内嵌的音视频播放器,并支持软硬解码,支持音频,支持录像截图,支持多路播放等,感兴趣的可以了解下
    2024-01-01
  • C++中的内存对齐实例详解

    C++中的内存对齐实例详解

    这篇文章主要介绍了C++中的内存对齐实例详解的相关资料,这里不仅提供实现方法及代码还提供了手工制作图,来帮助到大家理解这部分知识,需要的朋友可以参考下
    2017-07-07
  • C语言实现静态版通讯录的示例代码

    C语言实现静态版通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的静态版通讯录,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-08-08
  • 纯C语言:分治快速排序源码分享

    纯C语言:分治快速排序源码分享

    这篇文章主要介绍了分治快速排序源码,有需要的朋友可以参考一下
    2014-01-01
  • C语言队列和应用详情

    C语言队列和应用详情

    这篇文章主要介绍了C语言队列和应用详情,文章将让大家掌握掌握队列的原理和作用、掌握队列的写法、掌握队列在产品中的应用,需要的朋友可以参考一下
    2022-03-03
  • C语言菜鸟基础教程之单精度浮点数与双精度浮点数

    C语言菜鸟基础教程之单精度浮点数与双精度浮点数

    在C语言中,单精度浮点数(float)和双精度浮点数(double)类型都是用来储存实数的,双精度是用记忆较多,有效数字较多,数值范围较大。
    2017-10-10
  • C/C++ 中sizeof(''a'')对比详细介绍

    C/C++ 中sizeof(''a'')对比详细介绍

    这篇文章主要介绍了C/C++ 中sizeof('a')的值对比详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • 使用MySQL编程实现C语言功能强大化步骤示例

    使用MySQL编程实现C语言功能强大化步骤示例

    这篇文章主要为大家介绍了使用MySQL编程实现C语言功能强大化步骤示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • C语言数组和指针,内存之间的关系

    C语言数组和指针,内存之间的关系

    这篇文章主要介绍了C语言数组和指针,内存之间的关系,首先论证一维数组和一级指针之前的关系,我们常常使用一级指针指针的方式访问一维数组,只有对内存的理解到位才能理解它们直接的关系。需要的小伙伴可以参考一下
    2022-02-02

最新评论