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>

相关推荐
Dream it possible!2 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴2 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程2 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
澄澈天空3 小时前
C++ MFC添加RichEditControl控件后,程序启动失败
c++·mfc
Lzc7744 小时前
C++初阶——简单实现vector
c++·简单实现vector
一个小白15 小时前
C++——list模拟实现
开发语言·c++
程序员老舅5 小时前
C++ Qt项目教程:WebServer网络测试工具
c++·qt·测试工具·webserver·qt项目·qt项目实战
靡不有初1115 小时前
CCF-CSP第18次认证第一题——报数【两个与string相关的函数的使用】
c++·学习·ccfcsp
cookies_s_s7 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
不想编程小谭7 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode