C++ STL标准模板库

容器算法迭代器

vector

头文件

#include <vector>

定义

vector<typename> name;

typename :可以是任何基本类型;int、double、char、结构体、STL容器(vector、set...)

vector<vector<int**>****>** name;

name.begin():取name的首元素地址

name.end():取尾元素地址的下一个地址

vector<typename> name; //创建空的vector

vector<typename> name(N) //N为默认数组长度,初始值默认为0

vector<typename> name(N,value) //N为默认数组长度,初始值默认为value

给定数据:vector<int> data = {1,2,3,4,5};
vector<vector<int>> data(N1,vector<int>(N2)); //N1为行数,N2为列数,默认值为0

vector<vector<int>> data(N1,vector<int>(N2,value)); //N1为行数,N2为列数,默认值为value

给定数据:vector<vector<int>> data = { {1,2,3,4,5} , {6,7,8,9,10} };

特点

相当于一维数组name[SIZE],其长度可以根据需要进行变化;可理解成变长数组

容器内元素的访问

vector<typename>::iterator it;

迭代器it,类似指针,我们通过*it来访问vector里的元素

v[i] 等价于 *(v.begin()+i)

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

void test01(){
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);

    //通过迭代器访问容器中的数据
    //v.begin()为取v的首元素地址,而it指向这个地址
    // vector<int>::iterator itBegin = v.begin();//起始迭代器,指向容器中第一个元素
    // vector<int>::iterator itEnd = v.end(); //结束迭代器,指向容器中最后一个元素的下一个位置
    //第一种遍历方式
    // while(itBegin!=itEnd){
    //     cout << *itBegin <<" ";
    //     itBegin++;
    // }

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

int main(){
    test01();
}

STL提供的标准遍历算法

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void myPrint(int val){
    cout<< val << " ";
}
void test01(){
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);

    //myPrint回调
    for_each(v.begin(),v.end(),myPrint);
}

int main(){
    test01();
}
vector常用函数

向容器中尾插数据x ------ push_back(x)

删除容器尾元素 ------ pop_back()

获取容器元素个数 ------ size()

清空容器中所有元素 ------ clear()

向迭代器it处插入一个元素x ------ insert(it,x)

删除迭代器it处的元素 ------ erase(it)

删除[first,last)内的所有元素 ------ erase(first,last)

容器嵌套容器
cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

void test01(){
    
    vector<vector<int>>v;

    //创建小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    vector<int>v4;

    //向小容器中添加数据
    for(int i=0;i<4;i++){
        v1.push_back(i+1);
        v2.push_back(i+2);
        v3.push_back(i+3);
        v4.push_back(i+4);
    }

    //将小容器插入到大的容器中
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);

    //通过大容器,把所有数据遍历一遍
    for(vector<vector<int>>::iterator it = v.begin() ; it!=v.end() ; it++){
        //(*it) ------------ 容器 vector<int>
        for(vector<int>::iterator vit = (*it).begin() ; vit!=(*it).end() ; vit++){
            cout << *vit << " ";
        }
        cout << endl;
    }
}

int main(){
    test01();
}

(*it) ------------ 容器 vector<int>

v : v1 v2 v3 v4

String

头文件

#include <string>

相关推荐
珹洺1 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
孙同学要努力1 小时前
C++知识整理day1——前置基础知识整理(命名空间、输入输出、函数重载、引用)
开发语言·c++
沐泽Mu1 小时前
嵌入式学习-C嘎嘎-Day05
开发语言·c++·学习
几窗花鸢2 小时前
力扣面试经典 150(下)
数据结构·c++·算法·leetcode
Beau_Will2 小时前
数据结构-树状数组专题(1)
数据结构·c++·算法
hunandede2 小时前
av_image_get_buffer_size 和 av_image_fill_arrays
c++
怀澈1224 小时前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
chnming19874 小时前
STL关联式容器之set
开发语言·c++
威桑4 小时前
MinGW 与 MSVC 的区别与联系及相关特性分析
c++·mingw·msvc
熬夜学编程的小王5 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list