C++STL向量(练习题)

📅 2026/7/9 11:04:22
C++STL向量(练习题)
向量入栈【描述】请用向量vector实现栈结构然后进行如下栈操作输入5个整数将这5个整数依次进行入栈接下来做三次出栈操作并按照出栈顺序输出出栈元素。以上操作完成后输出此时的栈顶元素。【输入格式】输入5个整数用空格隔开。(1≤整数≤1000)【输出格式】输出2行第1行输出出栈元素,按照出栈顺序输出用空格隔开。第2行输出完成出栈操作后的栈顶元素。【输入样例】4 9 12 6 7【输出样例】7 6 129#includeiostream#includevectorusingnamespacestd;vectorintstack;//用动态数组模拟栈voidpush(intx){// x入栈stack.push_back(x);}intpop(){// 出栈if(!stack.empty()){intxstack.back();stack.pop_back();returnx;}coutStack is empty;return-1;}inttop(){// 查看栈顶元素if(!stack.empty())returnstack.back();coutStack is empty;return-1;}intmain(){intx;for(inti1;i5;i){cinx;push(x);}for(inti1;i3;i){coutpop() ;}coutendl;couttop() ;return0;}/* 【输入用例2】 1 2 3 4 5 【输出用例2】 5 4 3 2 【输入用例3】 5 4 3 2 1 【输出用例3】 1 2 3 4 【输入用例4】 10 10 10 10 10 【输出用例4】 10 10 10 10 【输入用例5】 -1 0 1 -2 2 【输出用例5】 2 -2 1 0 【输入用例6】 2147483647 -2147483648 0 999999 1 【输出用例6】 1 999999 0 -2147483648 */查找元素位置【描述】返回元素首次出现的位置索引【输入描述】输入一个整数 n接着输入 n个整数组成一个向量再输入一个要查找的整数值 val。【输出描述】查找 val向量中首次出现的位置索引从 0 开始如果找到就输出其索引否则输出未找到的提示。【样例输入1】51 2 3 4 51【样例输出1】元素 1 首次出现在位置索引: 0【样例输入2】51 2 3 4 50【样例输出2】元素 0 未在向量中找到#includeiostream#includevector#includealgorithmusingnamespacestd;intfindPosition(constvectorintvec,intval){autoitfind(vec.begin(),vec.end(),val);// 查找元素return(it!vec.end())?distance(vec.begin(),it):-1;}//主函数intmain(){intn;// 向量中元素的个数cinn;vectorintvec(n);// 创建大小为 n 的向量//依次输入 n 个整数用空格或回车分隔: endl;for(inti0;in;i){cinvec[i];}intval;//输入要查找的整数值cinval;// 查找并输出结果intposfindPosition(vec,val);if(pos!-1){cout元素 val 首次出现在位置索引: posendl;}else{cout元素 val 未在向量中找到 endl;}return0;}/* 【输入用例2】 5 10 20 30 40 50 10 【输出用例2】 元素 10 首次出现在位置索引: 0 【输入用例3】 6 5 3 8 1 7 2 8 【输出用例3】 元素 8 首次出现在位置索引: 2 【输入用例4】 4 1 2 3 4 4 【输出用例4】 元素 4 首次出现在位置索引: 3 【输入用例5】 5 10 20 30 40 50 99 【输出用例5】 元素 99 未在向量中找到 【输入用例6】 7 5 5 5 3 3 2 1 5 【输出用例6】 元素 5 首次出现在位置索引: 0 */合并两个有序向量【描述】假设 v1 和 v2 均为升序向量设计一个程序输出一个新的升序向量包含 v1 和 v2 中的所有元素按照升序序列排序【输入描述】输入两个有序向量的元素个数n1和 n2输入第一个有序向量 v1n1 个升序整数输入第二个有序向量 v2n2 个升序整数【输出描述】输出合并后的新向量【样例输入】31 2 341 2 3 4【样例输出】合并后的有序向量升序: 1 1 2 2 3 3 4#includeiostream#includevectorusingnamespacestd;vectorintmergeVectors(constvectorintv1,constvectorintv2){vectorintresult;result.reserve(v1.size()v2.size());// 预分配空间提高性能inti0,j0;// 双指针遍历两个有序向量按升序归并while(iv1.size()jv2.size()){if(v1[i]v2[j]){result.push_back(v1[i]);i;}else{result.push_back(v2[j]);j;}}// 如果 v1 还有剩余元素while(iv1.size()){result.push_back(v1[i]);i;}// 如果 v2 还有剩余元素while(jv2.size()){result.push_back(v2[j]);j;}returnresult;}// 主函数手动输入 合并 输出intmain(){intn1,n2;// 输入第一个有序向量cinn1;vectorintv1(n1);//依次输入 n1 个升序排列的整数用空格分隔for(inti0;in1;i){cinv1[i];}// 输入第二个有序向量cinn2;vectorintv2(n2);//依次输入 n2 个升序排列的整数用空格分隔for(inti0;in2;i){cinv2[i];}// 合并两个有序向量vectorintmergedmergeVectors(v1,v2);// 输出合并后的有序向量cout合并后的有序向量升序: ;for(intnum:merged){coutnum ;}coutendl;return0;}/* 【输入用例2】 3 1 3 5 3 2 4 6 【输出用例2】 合并后的有序向量升序: 1 2 3 4 5 6 【输入用例3】 0 3 10 20 30 【输出用例3】 合并后的有序向量升序: 10 20 30 【输入用例4】 4 1 2 5 9 3 2 6 7 【输出用例4】 合并后的有序向量升序: 1 2 2 5 6 7 9 【输入用例5】 3 7 7 7 3 7 7 7 【输出用例5】 合并后的有序向量升序: 7 7 7 7 7 7 【输入用例6】 1 100 4 10 20 30 40 【输出用例6】 合并后的有序向量升序: 10 20 30 40 100 */向量元素替换【描述】将一个向量中所有等于指定值的 oldVal 的元素替换为 newVal【输入描述】一个整数向量元素个数 n以及 n个整数值一个要被替换的 旧值oldVal一个用来替换的 新值newVal【输出描述】输出替换之后的向量元素【样例输入】51 2 2 3 4299【样例输出】替换后的向量: 1 99 99 3 4#includeiostream#includevector#includealgorithmusingnamespacestd;voidreplaceValue(vectorintvec,intoldVal,intnewVal){replace(vec.begin(),vec.end(),oldVal,newVal);}// 主函数手动输入向量 手动输入替换值 输出结果intmain(){intn;// 输入向量的元素个数cinn;vectorintvec(n);// 输入向量中的每个元素for(inti0;in;i){cinvec[i];}// 输入要替换的旧值intoldVal;cinoldVal;// 输入新的替换值intnewVal;cinnewVal;// 调用替换函数replaceValue(vec,oldVal,newVal);// 输出替换后的向量cout替换后的向量: ;for(intv:vec){coutv ;}coutendl;return0;}/* 【输入用例2】 4 10 20 30 40 99 100 【输出用例2】 替换后的向量: 10 20 30 40 【输入用例3】 3 5 5 5 5 0 【输出用例3】 替换后的向量: 0 0 0 【输入用例4】 6 1 3 5 7 9 11 5 99 【输出用例4】 替换后的向量: 1 3 99 7 9 11 【输入用例5】 4 7 8 9 10 8 8 【输出用例5】 替换后的向量: 7 8 9 10 【输入用例6】 1 42 42 999 【输出用例6】 替换后的向量: 999 */图书排序【描述】某小学最近引入一套系统根据输入系统的图书相关信息名字、出版年份即可自动按照出版年份升序排序请你用向量相关知识构造这个功能程序【输入描述】第一行输入读取书籍的数量 n接着输入n个书名、出版年份【输出描述】按照出版年份升序排序的信息【样例输入】3C Primer2012STL源码2005Effective C2009【样例输出】 按出版年份升序排序后的书籍列表 STL源码 (2005)Effective C (2009)C Primer (2012)#includeiostream#includevector#includealgorithmusingnamespacestd;structBook{string title;intyear;};boolcompareByYear(constBooka,constBookb){returna.yearb.year;}intmain(){intn;//输入书籍的数量cinn;vectorBookbooks(n);for(inti0;in;i){//输入第 i 1 本书的书名cin.ignore();// 清除缓冲区getline(cin,books[i].title);//输入第 i 1 本书的出版年份cinbooks[i].year;}sort(books.begin(),books.end(),compareByYear);cout 按出版年份升序排序后的书籍列表 endl;for(constautobook:books){coutbook.title (book.year)endl;}return0;}/* 【输入用例2】 1 设计模式 1994 【输出用例2】 按出版年份升序排序后的书籍列表 设计模式 (1994) 【输入用例3】 4 算法导论 2020 深入理解计算机系统 2020 计算机程序的构造和解释 2020 编程珠玑 2020 【输出用例3】 按出版年份升序排序后的书籍列表 算法导论 (2020) 深入理解计算机系统 (2020) 计算机程序的构造和解释 (2020) 编程珠玑 (2020) 【输入用例4】 5 Python编程 2018 数据结构与算法 2015 操作系统概念 2010 计算机网络 2021 数据库系统概念 2017 【输出用例4】 按出版年份升序排序后的书籍列表 操作系统概念 (2010) 数据结构与算法 (2015) 数据库系统概念 (2017) Python编程 (2018) 计算机网络 (2021) 【输入用例5】 3 计算机程序设计艺术 1968 C语言程序设计 1978 现代操作系统 2022 【输出用例5】 按出版年份升序排序后的书籍列表 计算机程序设计艺术 (1968) C语言程序设计 (1978) 现代操作系统 (2022) 【输入用例6】 3 Book A 2000 Book B 2000 Book C 2000 【输出用例6】 按出版年份升序排序后的书籍列表 Book A (2000) Book B (2000) Book C (2000) */