• 蓝桥杯 常用STL (C++) 未完待续


    在这里插入图片描述

    动态数组

    有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。
    这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是在C++里面有已经写好的标准模板库(Standard Template Library),就是我们常说的STL库
    实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便地调用标准库来减少我们的代码量。
    C++中动态数组写作vector,C语言中没有标准库,这也是为什么参加比赛推荐用C++而不用C的原因。

    引用库

    C++中vector的实现在一个< vector >头文件中,在代码开头引入这个头文件,并在引入所有头文件之后加上一
    句using namespace std

    #include
    using namespace std;
    int main(){
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    构造一个动态数组

    现在我们来构造一个动态数组。
    C++中直接构造一个vector的语句为:vector< T > vec。这样我们定义了一个名为vec的储存T类型数据的动态数组。其中T是我们数组要储存的数据类型,可以是int、floot、double、或者其他自定义的数据类型等等。初始的时候vec是空的。
    比如vector < int > a定义了一个储存整数的动态数组a。

    插入元素

    C++中通过push_back()方法在数组最后面插入一个新的元素。

    #include
    using namespace std;
    int main(){
    	vector<int> vec;//[]
    	vec.push_back(1);//[1]
    	vec.push_back(2);//[2,2]
    	vec.push_back(3);//[1,2,3]
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    获取长度并且访问元素

    C++中通过size()方法获取vector的长度,通过[ ]操作直接访问vector中的元素,这一点和数组是一样的。

    #include
    #include
    using namespace std;
    int main(){
    	vector<int> vec;//[]
    	vec.push_back(1);//[1]
    	vec.push_back(2);//[2,2]
    	vec.push_back(3);//[1,2,3]
    	for(int i=0;i<vec.size();i++){
    		cout<<vec[i]<<endl;
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    删除元素

    和插入一样,删除元素也只能在动态数组的末端进行操作。C++中通过pop_back()方法删动态数组的最后一个元素

    #include
    #include
    using namespace std;
    int main(){
    	vector<int> vec;//[]
    	vec.push_back(1);//[1]
    	vec.push_back(2);//[2,2]
    	vec.push_back(3);//[1,2,3]
    	vec.pop_back();//[1,2]
    	vec.pop_back();//[1]
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    清空

    C++中都只需要调用clear()方法就可清空vector。
    C++中vector的clear()只是清空vector,并不会清空开的内存。用一种方法可以清空vector的内存:

    // vector v;
    vector<int>().swap(v); 
    
    • 1
    • 2

    C++ vector 方法总结

    在这里插入图片描述

    vector的基础使用

    首先我们引入需要的头文件vector,在代码头部
    写下

    #include
    
    • 1

    首先我们学习如何使用基础的vector。
    在main函数里面通过 vector < int > v来定义一个储存整数的空的vector。当然vector可以存任何类型的数据,
    比如vector< string >v等等。用int来举例。在main函数的开头定义一个储存整数的动态数组v

    我们把1到10的平方依次储存到刚才定义的vector里面。这里我们需要借助一个循环来完成,循环枚举1到10。

    #include
    #include
    using namespace std;
    int main(){
    vector<int> v;
    for(int i=1;i<=10;i++){
    	v.push_back(i*i);
    }
    for(int i=0;i<v.size();i++){
    	cout<<v[i]<<" ";
    }
    cout<<endl;
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    vector 的高级用法

    用动态数组储存自定义数据

    动态数组不仅仅可以储存基本的数据类型,还能储存自定义数据类型,比如结构体。

    struct Student{
    	string name;//名字 
    	int age;//年龄 
    };
    int main(){
    	vector<Student> class1;//班级
    	Student stu1,stu2;//学生1,学生2
    	stu1.name="xiaohong";
    	stu1.age=12;
    	stu2.name="xiaoming";
    	stu2.age=25;
    	class1.push_back(stu1);
    	class1.push_back(stu2);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    构造函数

    我们知道可以通过push_back()来向动态数组添加一个元素。如果我们需要一个长度为n的,全是1的动态数组。我们可以像
    下面这样写。

    int n=10;
    vector<int> vec;
    for(int i=0;i<n;i++){
    	vec.push_back(1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其实,我们可以通过一个构造函数快速构建这样的一个动态数组。所谓构造函数,就是我们在定义一个对象的时候可以给他赋
    予初始值。

    int n=10;
    vector<int> vec(n,1);
    
    • 1
    • 2

    上面的代码,我们在定义一个vector的时候,调用构造函数,第一个参数表示初始的动态数组的长度,第二个参数表示初始的
    数组里面每个元素的值。如果不传入第二个参数,那么初始的值都是0

    二维动态数组

    我们都知道,数组可以开二维的,那么动态数组能用二维的吗?答案当然是肯定的,动态数组也支持二维
    的。vectorvec,这样就定义了一个二维的动态数组。注意,< int > >中间有一个空格,这个空格一定要加
    上,否则在一些老版本的编译器上将不能通过编译。

    通过上面的方法定义的二维数组,每一维都是空的,我们必须要一维一维的赋值。比如我们规定第一维的大小为n。

    int n=5;
    vector<vector<int> > vec2;
    for(int i=0;i<n;i++){
    	vector<int> x(i+1,1);
    	vec2.push_back(x);
    }
    for(int i=0;i<n;j++){
    	for(int j=0;j<vec2[i].size();i++){
    		cout<<vec2[i][j]<<" ";
    	}
    	cout<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

  • 相关阅读:
    ZYNQ 程序编译
    【c语言】推箱子
    Hudi从内核到实战介绍
    Linux驱动应用层与内核层之间的数据传递
    04循环和函数
    es elasticsearch 九 索引index 定制分词器 type结构后期弃用原因 定制动态映射 动态映射模板 零停机重建索引
    谷粒学苑_第十一天
    驾驶证识别易语言代码
    文件与IO
    03_SpingBoot 核心配置文件
  • 原文地址:https://blog.csdn.net/weixin_74774974/article/details/133838920