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>

相关推荐
天若有情67311 分钟前
01_软件卓越之道:功能性与需求满足
c++·软件工程·软件
whoarethenext15 分钟前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
Jay_5151 小时前
C++多态与虚函数详解:从入门到精通
开发语言·c++
xiaolang_8616_wjl2 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
FrostedLotus·霜莲3 小时前
C++主流编辑器特点比较
开发语言·c++·编辑器
liulilittle7 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
十年编程老舅8 小时前
跨越十年的C++演进:C++20新特性全解析
c++·c++11·c++20·c++14·c++23·c++17·c++新特性
小刘同学3219 小时前
C++11 特性
c++·c11新特性
真的想上岸啊10 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习