当前位置: 首页 > news >正文

C++的相关习题(2)

初阶模板

在这里插入图片描述

下面有关C++中为什么用模板类的原因,描述错误的是? ( )

A.可用来创建动态增长和减小的数据结构

B.它是类型无关的,因此具有很高的可复用性

C.它运行时检查数据类型,保证了类型安全

D.它是平台无关的,可移植性

A.模板可以具有非类型参数,用于指定大小,可以根据指定的大小创建动态结构

B.模板最重要的一点就是类型无关,提高了代码复用性

C.模板运行时不检查数据类型,也不保证类型安全,相当于类型的宏替换,故错误

D.只要支持模板语法,模板的代码就是可移植的

在下列对fun的调用中,错误的是( )

template < class T>

T fun(T x,T y){

return x *x+y *y;

}

A.fun(1, 2)

B.fun(1.0, 2)

C.fun(2.0, 1.0)

D.fun< float>(1, 2.0)

A.通过参数推导,T为int,不存在二义性,调用正确

B.由于参数类型不一样,模板不支持类型转换,推导参数会产生二义性,编译错误

C.通过参数推导,T为float,不存在二义性,调用正确

D.通过类型实例化函数,调用正确

下列关于模板的说法正确的是( )

A.模板的实参在任何时候都可以省略

B.类模板与模板类所指的是同一概念

C.类模板的参数必须是虚拟类型的

D.类模板中的成员函数全是模板函数

A. 模板实参省略意思为隐式实例化,一般情况下都使用隐式实例化,不需指定模板类型参数,让编译器进行推导

​ 但有些情况下编译器推导时可能会有歧义,比如:模板参数只有一个类型T,但是用两个不同类型隐式实例化

 template<class T>T Add(const T& x, const T& y){return x + y;}int main(){Add(10, 20);    // 正确Add(1.2, 30);   // 编译失败, 改正 Add<int>(1.2, 20) 或者 Add((int)1.2, 20)return 0;}

所以模板参数不是任何情况下都可以省略,要结合具体的使用场景,因此A的说法是错误的。

B.类模板是一个类家族,模板类是通过类模板实例化的具体类

C.C++中类模板的参数即为模板参数列表中内容,有两种方式:类型参数和非类型参数

​ 类型参数:即类型参数化,将来实例化为具体的实际类型,有点像函数的形参,形参可以接受不同值的实参

​ 非类型参数:在定义时给定了具体的类型,用该类型定义的为常量,比如:

template<class T, size_t N>class array{// ...};

D.正确,定义时都必须通过完整的模板语法进行定义。 因为所有类模板的成员函数,放在类外定义时,需要在函数名前加类名,而类名实际为ClassName< T>,所以定义时还需加模板参数列表

template<class T>size_t Stack<T>::size(){return _size;}

因此类模板中的成员函数都是函数模板

下列的模板声明中,其中几个是正确的( )

1)template

2)template<T1,T2>

3)template<class T1,T2>

4)template<class T1,class T2>

5)template<typename T1,T2>

6)template<typename T1,typename T2>

7)template<class T1,typename T2>

8)<typename T1,class T2>

A.2

B.3

C.4

D.5

A.1.模板语法错误,2.没有关键字class或typename指定类型,3.T2缺少class或typename

B.正确, 4,6,7为正确声明

C.5.T2缺少class或typename

D.8.缺少template

下列描述错误的是( )

A.编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础

B.函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具

C.模板分为函数模板和类模板

D. 模板类跟普通类以一样的,编译器对它的处理时一样的

A.模板是代码复用的重要手段

B.函数模板不是一个具体函数,而是一个函数家族

C.目前涉及到的模板就两类,函数模板与类模板

D.模板类是一个家族,编译器的处理会分别进行两次编译,其处理过程跟普通类不一样

​ }

​ return 0;

}

A.程序运行崩溃

B.1 2 3 4 5 0 6 7 8 9

C.1 2 3 4 5 6 7 8 9

D.1 2 3 4 6 7 8 9

分析:当迭代器的值为0时,此时会进行删除,删除后如果迭代器不重新赋值,会导致原来的迭代器失效,此时针对一个已经失效的迭代器在进行++,会导致程序崩溃

故答案为A

2.下面关于迭代器失效的描述哪个是错误的( )

A.vector的插入操作一定会导致迭代器失效

B.vector的插入操作有可能不会导致迭代器失效

C.vector的删除操作只会导致指向被删除元素及后面的迭代器失效

D.vector的删除操作只会导致指向被删除元素的迭代器失效

A.vector的插入操作如果导致底层空间重新开辟,则迭代器就会失效。如果空间足够,不扩容时,迭代器不一定失效,比如push_back尾插,元素插入到空间末尾,在不扩容时不会对迭代器产生影响

B.参考A的解释。

C.vector删除,当前元素肯定失效,后面元素会牵扯到移动数据,因此删除元素后面的迭代器也会失效

D. vector的删除操作不光会导致指向被删除元素的迭代器失效,删除元素后面的迭代器也会失效

list的特性及使用

1.下面有关vector和list的区别,描述错误的是( )

A.vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随机存取,应该使用vector

B.list拥有一段不连续的内存空间,如果需要大量的插入和删除,应该使用list

C.vector::iterator支持“+”、“+=”、“<”等操作符

D.list::iterator则不支持“+”、“+=”、“<”等操作符运算,但是支持了[ ]运算符

答案:D

A.如果想大量随机读取数据操作,vector是首选的容器

B.如果想大量的插入和删除数据,list效率较高,是首选

C.由于vector底层是连续空间,其迭代器就是相应类型的指针,所以支持对应的操作

D.list迭代器不支持[]运算符

2.以下代码实现了从表中删除重复项的功能,请选择其中空白行应填入的正确代码( )

template

void removeDuplicates(list &aList)

{

​ T curValue;

​ list::iterator cur, p;

​ cur = aList.begin();

​ while (cur != aList.end())

​ {

​ curValue = *cur;

​ //空白行 1

​ while (p != aList.end())

​ {

​ if (*p == curValue)

​ {

​ //空白行 2

​ }

​ else

​ {

​ p++;

​ }

​ }

​ }

}

A. p=cur+1;aList.erase(p++);

B.p=++cur; p == cur ? cur = p = aList.erase§ : p = aList.erase§;

C.p=cur+1;aList.erase§;

D.p=++cur;aList.erase§;

答案:B

分析:迭代p需要迭代不重复节点的下一节点,重要的是cur迭代器需要往下迭代,因此cur需要往前移动,二答案A C的cur都不会改变,空白行2是当需要找到重复值时进行节点删除,当删除时当前迭代器会失效,因此需要将迭代器p往后迭代,所以答案为 B

3.以下程序输出结果为( )

int main()

{

​ int ar[] = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9 };

​ int n = sizeof(ar) / sizeof(int);

​ list mylist(ar, ar+n);

​ list::iterator pos = find(mylist.begin(), mylist.end(), 5);

​ reverse(mylist.begin(), pos);

​ reverse(pos, mylist.end());

​ list::const_reverse_iterator crit = mylist.crbegin();

​ while(crit != mylist.crend())

​ {

​ cout<<*crit<<" ";

​ ++crit;

​ }

​ cout<<endl;

}

A.4 3 2 1 0 5 6 7 8 9

B.0 1 2 3 4 9 8 7 6 5

C.5 6 7 8 9 0 1 2 3 4

D.5 6 7 8 9 4 3 2 1 0

答案:C

分析:list::iterator pos = find(mylist.begin(), mylist.end(), 5); //找到5的位置

​ reverse(mylist.begin(), pos);//逆置0 1 2 3 4 为 4 3 2 1 0

​ reverse(pos, mylist.end()); //逆置5 6 7 8 9 为 9 8 7 6 5

​ 逆置完成之后其数据为:4 3 2 1 0 9 8 7 6 5

​ list::const_reverse_iterator crit = mylist.crbegin(); //反向迭代器进行反向访问

​ while(crit != mylist.crend()){}

​ 所以答案为:5 6 7 8 9 0 1 2 3 4

​ C答案

下面程序的输出结果正确的是( )

int main()

{

​ int array[] = { 1, 2, 3, 4, 0, 5, 6, 7, 8, 9 };

​ int n = sizeof(array) / sizeof(int);

​ list mylist(array, array+n);

​ auto it = mylist.begin();

​ while (it != mylist.end())

​ {

​ if(* it != 0)

​ cout<<* it<<" ";

​ else

​ it = mylist.erase(it);

​ ++it;

​ }

​ return 0;

}

A.1 2 3 4 5 6 7 8 9

B. 1 2 3 4 6 7 8 9

C.程序运行崩溃

D.1 2 3 4 0 5 6 7 8 9

分析:程序在使用迭代器取值时,如果不等于0就进行打印,为0时不打印并删除当前节点,所以答案为 B

对于list有迭代器it, 当erase(it)后,说法错误的是( )

A.当前迭代器it失效

B.it前面的迭代器仍然有效

C.it后面的迭代器失效

D.it后面的迭代器仍然有效

分析:删除节点后,只有指向当前节点的迭代器失效了,其前后的迭代器仍然有效,因为底层为不连续空间,只有被删除的 节点才会失效, 所以答案为 C

下面有关vector和list的区别,描述正确的是( )

A.两者在尾部插入的效率一样高

B.两者在头部插入的效率一样高

C.两者都提供了push_back和push_front方法

D.两者都提供了迭代器,且迭代器都支持随机访问

A.vector在尾部插入数据不需要移动数据,list为双向循环链表也很容易找到尾部,因此两者在尾部插入数据效率相同

B.vector头部插入效率极其低,需要移动大量数据

C.vector由于在头部插入数据效率很低,所以没有提供push_front方法

D.list不支持随机访问

stack和queue

下列代码的运行结果是( )

void main()

{

​ stack S;

​ char x,y;

​ x=‘n’;y=‘g’;

​ S.push(x);S.push(‘i’);S.push(y);

​ S.pop();S.push(‘r’);S.push(‘t’);S.push(x);

​ S.pop();S.push(‘s’);

​ while(!S.empty())

​ {

​ x = S.top();

​ S.pop();

​ cout<<x;

​ };

​ cout<<y;

}

A.gstrin

B.string

C.srting

D.stirng

分析:S.push(x);S.push(‘i’);S.push(y); 入栈了字母“nig” 左边栈底 右边栈顶

S.pop();S.push(‘r’);S.push(‘t’);S.push(x); 字母g出栈,然后入栈字母“rtn”,此时栈数据 为"nirtn"

S.pop();S.push(‘s’);字母n出栈,s入栈,最终的栈数据为nirts

while(!S.empty()){} 栈不空出栈打印,按相反顺讯出栈,所以打印结果为:strin

cout<<y;最后还打印了字母g

所以答案为B

下列代码的运行结果是( )

void main()

{

​ queue Q;

​ char x,y;

​ x=‘n’;y=‘g’;

​ Q.push(x);Q.push(‘i’);Q.push(y);

​ Q.pop();Q.push(‘r’);Q.push(‘t’);Q.push(x);

​ Q.pop();Q.push(‘s’);

​ while(!Q.empty())

​ {

​ x = Q.front();

​ Q.pop();

​ cout<<x;

​ };

​ cout<<y;

}

A.gstrin

B.grtnsg

C.srting

D.stirng

分析:Q.push(x);Q.push(‘i’);Q.push(y); 入队数据为:nig 左边队头,右边队尾

Q.pop();Q.push(‘r’);Q.push(‘t’);Q.push(x); n出队,rtn入队,队里数据为:igrtn

Q.pop();Q.push(‘s’); i出队,s入队,队里数据为:grtns

while(!Q.empty()){} 队不空,在出队打印为:grtns

cout<<y; 最后在打印一个g

故答案为:B

一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序是( )

A.e,d,a,c,b

B.a,e,d,c,b

C.b,c,d,a,e

D.b,c,a,d,e

分析:首先此题要保证入栈的顺序不能改变,其次,某个字母出栈前,必须把其栈顶的元素都要出栈

A:e要先出栈,就必须把a b c d e 全部入栈,然后e才能出栈,对于e d 的出栈没有问题,只是a要出栈,就必须c d 先出栈后,才能轮到a出栈,因此A是不可能得到的出栈顺序,其他答案可以自行验证

以下是一个二叉树的遍历算法,queue是FIFO队列,请参考下面的二叉树,根节点是root,正确的输出是( )

​ 1

​ 2 3

4 5 6 7

queue.push(root);
while(!queue.empty())
{node = queue.top();queue.pop();                             output(node->value)    //输出节点对应数字if(node->left)queue.push(node->left);if(node->right)queue.push(node->right);   
}

A.1376254

B.1245367

C.1234567

D.1327654

分析:此题是一个层次遍历的伪代码,能够看出是层次遍历,其结果就迎刃而解,答案 C

相关文章:

C++的相关习题(2)

初阶模板 下面有关C中为什么用模板类的原因&#xff0c;描述错误的是? ( &#xff09; A.可用来创建动态增长和减小的数据结构 B.它是类型无关的&#xff0c;因此具有很高的可复用性 C.它运行时检查数据类型&#xff0c;保证了类型安全 D.它是平台无关的&#xff0c;可移植…...

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法&#xff0c;了解了vector当中各个函数该如何使用&#xff0c;在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的&#xff0c;但同时也发现vector当中一些函数以及接口是和string不同的…...

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…...

OpenCV ORB角点检测匹配和偏移计算

OpenCV ORB角点检测匹配和偏移计算 1. 简介2. ORB角点检测匹配和偏移计算2.1. 创建平移图片2.2. ORB角点检测2.3. ORB角点匹配2.4. 计算变换矩阵 1. 简介 首先通过 cv2.ORB_create 创建ORB检测器 orb&#xff0c; 然后通过 orb.detectAndCompute 检测两张图片获得ORB角点&…...

图文详解ChatGPT-o1完成论文写作的全流程

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 本月中旬OpenAI发布了OpenAI o1系列新的AI模型。 据OpenAI介绍&#xff0c;这些模型旨在花更多时间思考后再做出反应&#xff0c;就像人一样。通过训练&#xff0c;它们学会改进思维过…...

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…...

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…...

RHCSA笔记三

第二章 linux中执行命令 命令格式 命令分为两类 内置命令&#xff1a;由 shell 程序自带的命令 外部命令&#xff1a;有独立的可执行程序文件&#xff0c;文件名即命令名 格式 主命令 参数 操作对象 # 注意&#xff1a; 下面是对于命令的语法的一些符号的说明&#xff1…...

【python】sorted() list.sort()

文章目录 sorted()和list.sort()sorted 函数sorted()根据键对字典排序根据字典的键排序根据字典的值排序将排序结果转换回字典 list.sort() 方法总结 keylambda student: student[age] sorted()和list.sort() 在Python中&#xff0c;sorted 函数和 list.sort() 方法都可以用来…...

训练集alpaca、sharegpt格式

LLaMA-Factory微调支持的格式 支持 alpaca 格式和 sharegpt 格式的数据集。 Alpaca格式 格式: [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","syst…...

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式&#xff08;TextFile&#xff09; 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件&#xff08;ORCFile&#xff09; 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…...

Linux Rsyslog 配置

1、Linux Rsyslog客户端配置 1&#xff09;安装rsyslog yum install rsyslog 2&#xff09;启用TCP或UDP传输 vim /etc/rsyslog.conf# Provides UDP syslog reception #若启用UDP进行传输&#xff0c;则取消下面两行的注释 #$ModLoad imudp #$UDPServerRun 514# Provide…...

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦&#xff0c;提前祝大家新年快乐 完整代码下载地址&#xff1a;https://download.csdn.net/download/ture_mydream/89926458...

模型训练识别手写数字(二)

模型训练识别手写数字&#xff08;一&#xff09;使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…...

深入Vue2

frontend Vue2 学习内容参考 /在线运行 Element 学习内容参考 /视频教学 vue2 1. vue 实例 当一个 Vue 实例被创建时&#xff0c;它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中 但是当使用Object.freeze()&#xff0c;会阻止修改现有的 property&#x…...

opencv-rust 系列3: Create_mask

前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 调试方法可参见前文. 一. 这个程序还是有点难度的, 关键点在于: 创建了遮罩. 直接调用一个函数, 还是很简单的.窗口事件处理. 注册窗口回调函数, 用以处理鼠标事件进程同步和互斥锁. 为…...

Go语言初识

一、Go语言概述 Go语言是为了取代C和java的地位&#xff0c;既要保留C的简洁&#xff0c;也追求java的规模化开发 并行及分布式的支持&#xff0c;使得开发多核及多机器集群程序如同单机一样简单 Go语言从语言级别支持协程&#xff08;goroutine, 轻量级线程&#xff09;,Go语言…...

Android Activity SingleTop启动模式使用场景

通知栏 当用户点击通知栏中的通知时,可以使用单顶启动模式来打开对应的活动,并确保只有一个实例存在。 简单集成极光推送 创建应用 获取appkey参数 切换到极光工作台 极光sdk集成 Project 根目录的主 gradle 配置 Module 的 gradle 配置 Jpush依赖配置 配置推送必须…...

PHP 代码执行相关函数

函数 说明 示例代码 ${} 用于复杂的变量解析&#xff0c;通常在字符串内用来解析变量或表达式。可以配合 eval 或其他动态执行代码的功能&#xff0c;用于间接执行代码。 eval(${flag}); eval() 用于执行一个字符串作为 PHP 代码。可以执行任何有效的 PHP 代码片段。没有…...

五周年,继续破浪前行

五周年&#xff0c;TapData 再一次带着自己的“乘风破浪”大队&#xff0c;在一个阳光明媚的日子里&#xff0c;把生日过在了海上。 头顶日升日落&#xff0c;这条属于全体 Tap-pers 的航船&#xff0c;再次校准航向&#xff0c;在船长的带领下&#xff0c;驶向下一个晴好的明…...

【操作系统】Linux之进程管理一

第1关&#xff1a;获取进程常见属性 ret.pidgetpid(); ret.ppidgetppid(); 第2关&#xff1a;进程创建操作-fork pid_t pid fork(); if(pid-1) printf("创建进程失败&#xff01;"); else if(pid0) printf("Children"); else printf("Parent"); …...

C语言_数据在内存中的存储

1. 整数在内存中的存储 计算机中的整数有三种2进制表示方法 &#xff1a;原码、反码、补码。 三种表示方式均有符号位和数值位两个部分&#xff0c;最高一位的是符号位&#xff0c;剩下的都是数值位。符号位用“0”表示“正”&#xff0c;用“1”表示“负”。 正数的原、反、…...

华为原生鸿蒙操作系统:我国移动操作系统的新篇章

华为原生鸿蒙操作系统&#xff1a;我国移动操作系统的新篇章 引言 在移动操作系统领域&#xff0c;苹果iOS和安卓系统一直占据主导地位。然而&#xff0c;随着华为原生鸿蒙操作系统的正式发布&#xff0c;这一格局正在发生深刻变化。作为继苹果iOS和安卓系统后的全球第三大移动…...

队列的基本操作(数据结构)

1.实验内容&#xff1a; 编写一个程序sqqueue.cpp&#xff0c;实现环形队列(假设栈中元素类型ElemType 为 char)的各种基本运算&#xff0c;并在此基础上设计一个程序exp4_1.cpp&#xff0c;完成如下功能: 2.实验步骤&#xff1a; (1)初始化队列q (2)判断队列q是否非空 (3…...

linux开机自启动三种方式

方式一、 1&#xff1a;rc.local 文件 1、执行命令&#xff1a;编辑 “/etc/rc.local” vi /ect/rc.local 2、然后在文件最后一行添加要执行程序的全路径。 例如&#xff0c;每次开机时要执行一个 hello.sh&#xff0c;这个脚本放在 / usr 下面&#xff0c;那就可以在 “/et…...

AI创作者与人类创作者的协作模式

公主请阅 1. AI创作者的崛起1.1 AI创作者的工作原理1.2 AI创作者的优势 2. 人类创作者的独特价值2.1 创造性与情感2.2 伦理与价值观2.3 文化与背景 3. AI与人类的协作模式3.1 协同创作3.2 内容编辑3.3 数据驱动的创作3.4 跨媒体协作 4. AI与人类协作的挑战4.1 技术局限性4.2 版…...

FPGA第 13 篇,使用 Xilinx Vivado 创建项目,点亮 LED 灯,Vivado 的基本使用(点亮ZYNQ-7010开发板的LED灯)

前言 在FPGA设计中&#xff0c;Xilinx Vivado软件是一款功能强大的设计工具&#xff0c;它不仅支持硬件描述语言&#xff08;HDL&#xff09;的开发&#xff0c;还提供了丰富的图形化设计界面&#xff0c;方便用户进行硬件设计、调试和测试。这里我们将详细介绍&#xff0c;如…...

Kafka文档阅读笔记之基本操作

官方资料 官方首页官方文档基本操作topic的配置参数 topic的部分操作 创建新的topic 命令样例&#xff0c;如下&#xff1a; bin/kafka-topics.sh \--bootstrap-server localhost:9092 \--create \--topic my_topic_name \--partitions 20 \--replication-factor 3 \--conf…...

Golang | Leetcode Golang题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; var desc [3]string{"Gold Medal", "Silver Medal", "Bronze Medal"}func findRelativeRanks(score []int) []string {n : len(score)type pair struct{ score, idx int }arr : make([]pair, n)for i, s : …...

机器学习——元学习(Meta-learning)

元学习&#xff08;Meta-learning&#xff09;&#xff1a;学习如何学习的机器学习 元学习&#xff08;Meta-learning&#xff09;&#xff0c;即“学习如何学习”&#xff0c;是机器学习领域中一个令人兴奋且极具潜力的研究方向。它的核心目标是让机器学习系统学会高效地学习…...