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>

相关推荐
笑鸿的学习笔记7 分钟前
qt-C++语法笔记之Stretch与Spacer的关系分析
c++·笔记·qt
hardStudy_h22 分钟前
C++——内联函数与Lambda表达式
开发语言·jvm·c++
ZZZS05161 小时前
stack栈练习
c++·笔记·学习·算法·动态规划
位东风1 小时前
【c++学习记录】状态模式,实现一个登陆功能
c++·学习·状态模式
雷羿 LexChien3 小时前
C++内存泄漏排查
开发语言·c++
嘉小华4 小时前
CMake 完全指南:第一章 - 构建的烦恼 - 为什么需要CMake?
c++
Feliz Da Vida4 小时前
[代码学习] c++ 通过H矩阵快速生成图像对应的mask
c++·学习
无聊的小坏坏5 小时前
单调栈通关指南:从力扣 84 到力扣 42
c++·算法·leetcode
YOLO大师6 小时前
华为OD机试 2025B卷 - 小明减肥(C++&Python&JAVA&JS&C语言)
c++·python·华为od·华为od机试·华为od2025b卷·华为机试2025b卷·华为od机试2025b卷
看到我,请让我去学习7 小时前
OpenCV编程- (图像基础处理:噪声、滤波、直方图与边缘检测)
c语言·c++·人工智能·opencv·计算机视觉