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} };

特点

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

容器内元素的访问

vector<typename>::iterator it;

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

vi 等价于 *(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>

相关推荐
Sakura_j_h_18 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
程序喵大人19 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
jimy121 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
会编程的小孩1 天前
C++ 定时器
c++
沫璃染墨1 天前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
揽星河..1 天前
【C语言】分支和循环
c语言·c++·算法
Fuyo_11191 天前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
傲世仙尊1 天前
继承-类设计层次复用切片转换与菱形继承的死结
c++
架构师伯子明1 天前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
纪念 2291 天前
C++算法(六)
开发语言·c++·算法