ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C++基础:找出vector容器中最大的两个数

2026/8/25 7:56:42 拓冰建站 浏览量
C++基础:找出vector容器中最大的两个数 C基础找出vector容器中最大的两个数文章目录C基础找出vector容器中最大的两个数1. 前言2. 动态数组2.1 构造函数2.2 赋值操作2.3 插入和删除2.4 容量和大小2.5 数据存取2.6 互换容器2.7 释放内存3. 迭代器4. 算法4.1 排序4.2 倒序4.3 去重4.4 复制4.5 查找4.6 遍历4.7 随机数4.7.1 srand()函数4.7.2 rand()函数5. 代码演示1. 前言定义一个vector数组并进行初始化向其中填充10个不同的随机数1-100找出容器中最大的两个数并输出。2. 动态数组vector容器是STL标准模板库中最常用的容器之一实现的是一个动态数组即可以进行元素的插入和删除提供了对数组元素的快速随机访问以及在数组尾端增加和删除元素的高效实现在此过程中vector会动态调整所占用的内存空间。2.1 构造函数创建vector容器。函数描述vectorT vT表示数据元素的类型可以是int类型也可以是string对象vector(v.begin(), v.end())将[v.begin(),v.end())区间中的元素拷贝给本身v.begin()表示返回指向容器第一个元素v.end()表示返回指向容器最后一个元素之后的迭代器vector(n, element)构造函数将n个element拷贝给本身vector(const vector vec)拷贝构造函数如vectorint v3(10, 100); vectorint v4(v3);2.2 赋值操作给vector容器进行赋值。函数描述vector operator(const vector vec)重载等号运算符vec.assign(begin, end)将[begin,end)区间中的数据拷贝赋值给vecvec.assign(n, element)将n个element拷贝赋值给vec2.3 插入和删除对vector容器进行插入、删除操作。函数描述vec.push_back(element)在尾部加入一个元素elementvec.pop_back()删除最后一个元素vec.insert(pos,element)在pos位置插入一个element拷贝vec.erase(pos)删除pos位置的数据vec.erase(begin,end)删除[begin,end)区间的数据2.4 容量和大小对vector容器的容量和大小操作。函数描述vec.resize(num)用于设定容器的内存大小vec.reserve(num)用于预分配容器所需的内存空间vec.size()返回容器的数据个数vec.capacity()返回容器的存储容量vec.empty()判断容器是否为空2.5 数据存取对vector中的数据进行存取操作。函数描述vec.front()返回容器中第一个数据元素vec.back()返回容器中最后一个数据元素不检查这个数据是否存在vec.at(index)返回索引为index所指的数据如果index越界抛出std::out_of_range异常operator[ ]通过索引访问vector中的元素如vectorint nums {1, 2, 3, 4, 5}; int element nums[1];2.6 互换容器实现两个容器内元素进行互换。函数描述vec1.swap(vec2)将vec1中的元素和vec2中的元素整体交换2.7 释放内存清空容器中所有数据释放内存。函数描述vec.clear()清空容器中所有数据但不释放内存vec.shrink_to_fit()减少容量以释放内存std::vector().swap(vec)通过赋予一个空的vector来释放容器占用的内存空间3. 迭代器在C中iterator是一种特殊类型的对象它能使得开发者用来遍历容器如vector、list、map等的元素又不需暴露该对象的内部细节。请问一年中有哪几个大月#includeiostream#includealgorithm#includevectorusingnamespacestd;intmain(){vectorintvec{1,2,3,4,5,6,7,8,9,10,11,12};vectorint::iterator it;// 1.使用迭代器删除元素for(itvec.begin();it!vec.end();){if(*it%20)// 删掉偶数元素{itvec.erase(it);}else{it;}}itvec.erase(vec.begin()4,vec.end());// 删掉元素911// 2.使用迭代器插入元素itfind(vec.begin(),vec.end(),7)1;// 返回值是目标元素的下标找不到时返回值为迭代器结尾vectorintvec2{8,10,12};// 插入元素81012vec.insert(it,vec2.begin(),vec2.end());// 3.使用迭代器返回容器的某个元素itvec.begin()1;cout当前月*itendl;// 4.使用迭代器遍历容器cout公历的大月31天;for(itvec.begin();it!vec.end();it){cout*it ;}return0;}运行结果当前月3公历的大月31天1357810124. 算法算法是STL标准模板库中的算法库提供了大量的算法函数可用于各种容器如vector、list、map等的操作。这些算法函数可以大大简化程序员的编程工作同时提高代码的可读性和可维护性。4.1 排序sort()用来对一个序列进行排序。vectorintnums{1,4,5,2,3};sort(nums.begin(),nums.end());4.2 倒序reverse()用来反转容器中的元素顺序。vectorintnums{1,4,5,2,3};sort(nums.begin(),nums.end());reverse(nums.begin(),nums.end());4.3 去重unique()用来实现相邻相同元素的去重。vectorintnums{1,4,5,2,4,1,3};sort(nums.begin(),nums.end());autoitunique(nums.begin(),nums.end());nums.erase(it,nums.end());4.4 复制copy()可以将容器中的元素复制到另一个容器中。intarr[]{1,2,3,4,5};intnsizeof(arr)/sizeof(arr[0]);vectorintvec(n);copy(arr,arrn,vec.begin());4.5 查找find()用来在容器中查找指定的元素该算法返回一个迭代器指向第一个匹配的元素如果没有找到匹配的元素则返回容器的end()迭代器。vectorintvec{1,2,3,4,5,6,7,8,9,10,11,12};autoitfind(vec.begin(),vec.end(),7);4.6 遍历for_each()对容器内的每个元素执行一个操作可以使用函数、函数对象或者Lambda表达式来进行操作。#includeiostream#includealgorithm#includevectorusingnamespacestd;// 一元函数对象classPrint{public:Print(){count0;}voidoperator()(intnum){coutcount:num ;count;}private:intcount;};// 普通函数voidprint(intnum){coutnum ;}intmain(){vectorintvec{2,4,6,8,10};cout传入Lambda表达式endl;for_each(vec.begin(),vec.end(),[](inta){couta ;});coutendl;for_each(vec.begin(),vec.end(),[](intx){x*x;});for(inti0;ivec.size();i){coutvec[i] ;}coutendl;cout传入普通函数endl;for_each(vec.begin(),vec.end(),print);coutendl;cout传入一元函数对象endl;for_each(vec.begin(),vec.end(),Print());coutendl;return0;}运行结果传入Lambda表达式2468104163664100传入普通函数4163664100传入一元函数对象0:41:162:363:644:1004.7 随机数srand()用来初始化随机数种子rand()用来产生随机数。4.7.1 srand()函数随机数产生的初始值种子值srand()函数是随机数发生器的初始化函数和rand()配合使用产生伪随机序列。srand((unsigned)time(NULL));4.7.2 rand()函数如果要生成一个指定范围内的随机整数可以使用取模运算符%将rand()函数的返回值对范围大小取模rand()函数左闭右开。intnumberrand()%max1;//生成1-max的随机整数5. 代码演示#includeiostream#includealgorithm#includevector#includecstdlib#includectimeusingnamespacestd;int*getmax(vectorintvec,intlength){staticintmax[2]{0,0};//加上static关键字定义静态局部变量for(inti0;ilength;i){if(max[0]vec[i]){max[1]max[0];max[0]vec[i];}elseif(max[1]vec[i]){max[1]vec[i];}}//int max *max_element(vec.begin(), vec.end());//vector容器查找最大值returnmax;}intmain(){vectorintvec;//创建动态数组vec.resize(10);//用于设定容器的内存大小且创建元素对象vec.reserve(100);//用于预分配容器所需的内存空间不会构造新的元素vectorint::iterator it;//创建迭代器原来遍历或指向容器里面的元素intlength(int)vec.size();//返回容器元素的个数srand((unsigned)time(NULL));//srand()用来设置rand()产生随机数时的随机数种子for(inti0;ilength;i){vec[i]rand()%1001;//生成1-100的随机数for(intj0;ji;j){//判断和前面的数是否重复if(vec[i]vec[j]){//如果重复重新产生随机数i--;//退回上次外循环终止本次内循环break;}}}//vec.push_back(101);//在尾部加入元素cout容器数据endl;for(itvec.begin();it!vec.end();it){cout*it ;//使用迭代器访问元素}coutendl;//vec.shrink_to_fit();//成功退回未使用的内存空间cout容器的数据个数为vec.size()容器的存储容量为vec.capacity()endl;int*maxgetmax(vec,length);cout容器中最大的两个数endl;for(inti0;i2;i){cout第i1个数是*(maxi)endl;}return0;}运行结果容器数据4488213819595076475容器的数据个数为10容器的存储容量为100容器中最大的两个数 第1个数是88第2个数是75✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨——以上内容是关于如何用C语言找出vector容器中最大的两个数希望对初学者或再次学习者有所帮助基础打扎实不怕风吹雨打 如果以上内容有错误或者内容不全望大家提出我也会继续写好每一篇博文待续未完——文优欢迎观看和提问