【C/C++笔试练习】sort排序、STL容器、vector的特性、一级容器、迭代器失效、异常捕获、动态转换、统计每个月兔子的总数、字符串通配符

news2025/1/18 6:46:58

文章目录

  • C/C++笔试练习
  • 选择部分
    • (1)sort是不稳定排序
    • (2)存放即有序的STL容器
    • (3)连续储存的STL容器
    • (4)vector的特性
    • (5)一级容器
    • (6)unordered_map和priority_queue的底层
    • (7)迭代器失效
    • (8)异常捕获
    • (9)动态转换
    • (10)多态的实现
  • 编程题 day18
    • 统计每个月兔子的总数
    • 字符串通配符

C/C++笔试练习

选择部分

(1)sort是不稳定排序

  以下关于STL的描述中,()是错的

  A. STL容器是线程不安全的
  B. 当容量不够时,STL的一个典型实现是vector内部内存扩展方式为翻倍
  C. std::sort是稳定排序
  D. std::bitset不是一个STL容器

  答案:C

  A.STL容器并不是线程安全的。 如果在多个线程中同时修改同一个STL容器,可能会导致未定义的行为。为了在多线程环境中安全地使用STL,需要处理同步,或者使用某些线程安全的STL变体。

  B.std::vector 的一个常见实现策略是当其容量不足以容纳更多元素时,会按2倍扩容(Linux下)或者1.5扩容(VS下)。 这样做的目的是为了减少重新分配和复制元素的次数,从而提高性能。

  C.std::sort 不是稳定的。sort的底层是插入排序和快速排序结合的算法,稳定排序意味着相等的元素在排序后保持其原始顺序,快排不满足稳定排序的特点。

  D.std::bitset是一个位集合,它只能存储二进制位, 所以不能叫做容器。

  

(2)存放即有序的STL容器

  以下STL的容器存放的数据,哪个肯定是排好序的()

  A. vector
  B. deque
  C. list
  D. map

  答案:D

  map的底层为平衡搜索树(红黑树),会默认根据数据的键对值排序。

  

(3)连续储存的STL容器

  以下哪种STL容器中的对象是连续存储的()

  A. list
  B. vector
  C. map
  D. set

  答案:B

  list是一个双向链表,它的元素是通过链表节点连续存储的,但这种连续不是物理内存上的连续。vector是一个动态数组,它的元素在物理内存中是连续存储的。

  map是一个关联容器,它使用红黑树(或某些其他平衡二叉搜索树)来存储元素。元素在物理内存中不是连续存储的。set和map 类似。

  

(4)vector的特性

  STL中的哪种结构在增加成员时可能会引起原有成员的存储位置发生改变()

  A. map
  B. set
  C. list
  D. vector

  答案:D

  list是一个双向链表。在链表中增加一个新元素时,不会改变已有元素的存储位置。vector是一个动态数组。当向vector 中添加一个新元素时,它可能需要重新分配内存并移动所有元素到新的内 存位置,从而改变它们的存储位置。

  map是一个关联容器,它使用红黑树(或某些其他平衡二叉搜索树)来存储元素。在增加一个新元素时,可能会引起树结构的调整,但不会改变已有元素的存储位置。set和map 类似。

  

(5)一级容器

  STL中的一级容器有:

  A. vector, deque, list, set, multiset, map, multimap.
  B. 序列容器,关联容器,容器适配器
  C. set, multiset, map, multimap.
  D. vector, deque, list.

  答案:D

  一级容器:数据类型不能是组合类型,只能是内置类型的容器。
  如:vector<int>; vector<vector<int>>;

  注意:pair,key-value值对结构也是组合类型:map<int,string>;

  所以属于STL一级容器的是vector, deque, list。

  

(6)unordered_map和priority_queue的底层

  STL中的unordered_map和priority_queue使用的底层数据结构分别是什么()

  A. rbtree,queue
  B. hashtable,heap
  C. rbtree,heap
  D. hashtable,queue

  答案:B

  unordered_map: 使用哈希表(hashtable)作为其底层数据结构。

  priority_queue: 使用堆(heap)作为其底层数据结构。

  

(7)迭代器失效

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

  A. vector的插入操作不会导致迭代器失效
  B. map的插入操作不会导致迭代器失效
  C. vector的删除操作只会导致指向被删除元素及后面的迭代器失效
  D. map的删除操作只会导致指向被删除元素的迭代器失效

  答案:A

  A. 当在vector中进行插入操作时,迭代器可能失效。特别是当插入发生在容器中间或末尾时,它可能会导致需要重新分配内部存储,从而让指向向量中间元素的迭代器变得无效。

  B.map的插入操作不会使迭代器失效,因为map的内部是平衡树结构。

  C.当从vector中删除一个元素时,指向被删除元素和其后面的元素的迭代器会失效,但是前面的元素不会失效。

  D.map的删除操作只会使指向被删除元素的迭代器失效。

  

(8)异常捕获

  如何捕获异常可以使得代码通过编译?

class A {
public:
	A(){}
};

void foo(){
	throw new A;
}

  A. catch (A && x)
  B. catch (A * x)
  C. catch (A & x)
  D. 以上都是

  答案:B

  A.catch (A && x)这是一个右值引用捕获,它捕获的是对象(例如new A返回的指针)的移动语义。但是,throw new A;语句抛出一个动态分配的A类型的对象,而不是移动语义。因此,此选项是错误的。

  B. catch (A * x)这是一个指针捕获,它能够捕获动态分配的对象,如new A。这是正确的捕获方式。

  C. catch (A & x)这是一个引用捕获,它通常用于捕获基本数据类型或静态分配的对象。对于动态分配的对象,引用捕获是不适用的,因为它们不能被移动或复制。因此,此选项是错误的。

在这里插入图片描述

  

(9)动态转换

  有如下程序段:

#include <iostream>
using namespace std;

class A {
public:
	~A() {cout << "~A()";}
};

class B{
public:
	virtual ~B() {cout << "~B()";}
};

class C: public A, public B {
public:
	~C() {cout << "~C()";}
};

int main() {
	C * c = new C;
	B * b1 = dynamic_cast<B *>(c);
	A * a2 = dynamic_cast<A *>(b1);
	delete a2;
}

  则程序输出:

  A. ~C() ~B() ~A()
  B. ~C() ~A() ~B()
  C. A)B)都有可能
  D. 以上都不对

  答案:D

int main() {
	C* c = new C;//1.构造对象C,C是由A,B继承得来的
	B* b1 = dynamic_cast<B*>(c);//2.B类型指针b1动态转换为c,这里没有问题,父类指针指向子类
	A* a2 = dynamic_cast<A*>(b1);//3.A类型指针a2动态转换为B类型的指针b1
	delete a2;//4.释放子类C,但是A类型和B类型没有任何继承关系,导致程序崩溃
}

在这里插入图片描述

  

(10)多态的实现

  以下程序输出结果是____

class A
{
public:
	A ():m_iVal(0){test();}
	virtual void func() { std::cout<<m_iVal<<‘ ’;}
	void test(){func();}
public:
	int m_iVal;
};

class B : public A
{
public:
	B(){test();}
	virtual void func()
	{
		++m_iVal;
		std::cout<<m_iVal<<‘ ’;
	}
};

int main(int argc ,char* argv[])
{
	A*p = new B;
	p->test();
	return 0;
}

  A. 1 0
  B. 0 1
  C. 0 1 2
  D. 2 1 0
  E. 不可预期
  F. 以上都不对

  答案:C

class A
{
public:
	A() :m_iVal(0) { test(); }//1.1先构造父类对象,调用test(),此时的m_iVal为0
	virtual void func() { std::cout << m_iVal << ' '; }//1.3打印m_iVal,打印0    					  
													   //1.5虚函数调用子类的func()  
	void test() { func(); }//1.2调用func()   
						   //1.4此时虚表生成,调用func()    
						   //2.1同理调用子类虚函数,打印2
public:
	int m_iVal;
};

class B : public A
{
public:
	B() { test(); }//1.3再构造子类对象,调用父类的test()
	virtual void func()//1.6m_iVal++,打印1
	{
		++m_iVal;
		std::cout << m_iVal << ' ';
	}
};

int main(int argc, char* argv[])
{
	A* p = new B;//1.创建子类对象B,A父类指针p指向子类对象,多态的信号
	p->test();//2.父类指针调用函数test()
	return 0;
}

在这里插入图片描述

            

编程题 day18

统计每个月兔子的总数

统计每个月兔子的总数

  解题思路:第n个月的兔子数量由两部分组成,一部分是上个月的兔子f(n-1),另一部是满足3个月大的兔子,会生一只兔子f(n-2)。所以第n个月兔子总数: f(n) = f(n - 1) + f(n - 2)。本题是在变相考察斐波那契数列。

#include<iostream>
using namespace std;

/*
//迭代法求解
int Fib(int n)
{
    if(n <= 2)
    return 1;
    int f, f1=1, f2=1;
    for(int i=3; i<=n; ++i)
    {
        f = f1 + f2;
        f1 = f2;
        f2 = f;
    }
    return f;
}
*/

//递归法求解
int Fib(int n) 
{
    if (n <= 2)
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2);
}

int main() 
{
    int month;
    int sum = 0;
    while (cin >> month) 
    {
        sum = Fib(month);
        cout << sum << endl;
    }
    return 0;
}

  

字符串通配符

字符串通配符

  解题思路:本题可以通过递归求解。从前向后一次匹配,遇到相同字符,都向后移动一个字符,如果通配符遇到"?“,则不需匹配,自动跳过一个字符,如果通配符遇到”*",则可以匹配任意多个字符,包括0个,此时可以有三种选择,1,匹配0个,通配符向后移动一个字符,字符串不动。2,匹配1个,通配符和字符串都向后移动一个字符。3,匹配多个,通配符不动,字符串向后移动一个字符。递归的终止条件:通配符或者字符串遇到’\0’。当他们同时结束。

#include<iostream>
#include<string>
#include<vector>
#include<ctype.h>
using namespace std;

bool Match(const string& patter, const string& str, int i, int j)
{
    if(i == patter.size() && j == str.size())
    {   
        return true;
    }
    if(i == patter.size() || j == str.size())
    {
        return false;
    }

    if(patter[i] == '?')
    {
        if(!isdigit(str[j]) && !isalpha(str[j]))
        {
            return false;
        }
        return Match(patter, str, i + 1, j + 1);
    }
    else if(patter[i] == '*')
    {
        while(patter[i] == '*')
        {
            i++;
        }
        i--;

        if(!isdigit(str[j]) && !isalpha(str[j]))
        {
            return Match(patter, str, i + 1, j);
        }
        return Match(patter, str, i + 1, j) //匹配0个
        || Match(patter, str, i + 1, j + 1)//匹配一个
        || Match(patter, str, i, j + 1)//匹配n个
        ;
    }
    else if(tolower(patter[i]) == tolower(str[j]))
    {
        return Match(patter, str, i + 1, j + 1);
    }
    else 
    {
        return false;
    }
}

int main()
{
    string s1;
    getline(cin, s1);
    string s2;
    getline(cin, s2);
    if(Match(s1, s2, 0, 0)) 
        cout<<"true"<<endl;
    else
        cout<<"false"<<endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1345210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、gdb常用功能2

1.4、线程 程序避免不了涉及到多线程.常用指令如下. 命令简写形式说明info thread显示当前进程内所有线程信息thread 切换到num线程thread find 寻找regexp在gdb中的idinfo address 结合上述图片理解&#xff0c;第一列的id是gdb内部为线程排序的一个id&#xff0c;第三列中…

Redis:原理速成+项目实战——Redis的Java客户端

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis常见命令&#xff08;数据结构、常见命令总结&#xff09; &#x1f4da;订阅专栏&…

算法基础之最短编辑距离

最短编辑距离 核心思想 &#xff1a; 线性dp 集合定义 &#xff1a; f[i][j]为操作方式的最小值 集合计算 : 三种操作 取最小 ① 删除 : 将a[i]删掉 使ab相同 –> f[i-1][j] 1 f[i][j]② 增添 : 在a[i]后加上一个数 使ab相同 –> f[i][j-1] 1 f[i][j]③ 替换 : 将a[…

【unity学习笔记】捏人+眨眼效果+口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型&#xff08;.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。&#xff08;VRM-0.116.0_0f6c&#xff09; 3.将univrm导入到工程中&#xff08;assets&#xff09;。 三…

基于FPGA的数字电路(PWM脉宽调制)

一.PWM的制作原理 假如我们有一个锯齿波&#xff0c;然后在锯齿波上设置一个阈值&#xff08;黑色水平虚线&#xff09;&#xff0c;凡是大于该阈值时输出均为高电平&#xff0c;反之则为低电平&#xff0c;这样我们是不是就得到一个PWM信号呢&#xff1f;如果我们想调整它的占…

数据治理:释放数据价值的关键

随着数字化时代的到来&#xff0c;数据已成为组织和企业最重要的资产之一。然而&#xff0c;数据的快速增长和复杂性也给数据管理带来了巨大的挑战。为了确保数据的质量、安全性和合规性&#xff0c;数据治理已成为组织和企业必须面对的重要问题。数据治理是数据要素市场建设的…

OSG绘制视锥体(升级版)

OSG绘制视锥体&#xff0c;这一篇增加设置相机参数接口&#xff0c;支持通过eye、center、up设置相机参数。 代码如下&#xff1a; #include "stdafx.h" #include <osgViewer/Viewer> #include <osg/ShapeDrawable> #include <osg/Geode> #includ…

SkyWalking UI 修改发布Nginx

文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…

电子学会C/C++编程等级考试2022年12月(八级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:生理周期(2022.12) 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容…

【网络安全常用术语解读】SCAP详解

本文主要介绍什么是SCAP&#xff0c;SCAP的产生背景是怎样的&#xff0c;SCAP有什么用途&#xff0c;有哪些组件&#xff0c;各个组件的用途是什么&#xff1f; SCAP产生背景 由于计算机和网络技术的快速发展&#xff0c;越来越多的软件和系统被应用到企业和机构中&#xff0c…

安装与部署Hadoop

一、前置依赖1、java 一、前置依赖 1、java 需要安装java rz tar -zxvf jdk-8u381-linux-x64.tar.gz -C / ln -s /jdk1.8.0_381/ /jdk # rm jdk-8u381-linux-x64.tar.gzvim /etc/profile export JAVA_HOME/jdk export PATH$PATH:$JAVA_HOME/bin # source /etc/profile ln -s…

Strateg策略模式(组件协作)

策略模式&#xff08;组件协作&#xff09; 链接&#xff1a;策略模式实例代码 注解 目的 正常情况下&#xff0c;一个类/对象中会包含其所有可能会使用的内外方法&#xff0c;但是一般情况下&#xff0c;这些常使用的类都是由不同的父类继承、组合得来的&#xff0c;来实现…

2023.12.30 Pandas操作

目录 1. pandas基础 1.1 pandas的基本介绍 1.2 pandas基础使用 2. pandas的数据结构 2.1 series对象 2.2 使用列表,自定义索引,字典,元组方式创建series对象 2.3 Series对象常用API 2.4 Series 对象的运算 1. pandas基础 1.1 pandas的基本介绍 Python在数据处理上独步天下…

SQL server Profiler的使用

在SQL server management studio 中 的工具下 选择SQL server Profiler 对sql进行过滤

计算机网络【EPOLL 源码详解】

IO多路复用 在以前&#xff0c;传统的网络编程是多线程模型&#xff0c;一个线程单独处理一个请求。 然而&#xff0c;线程是很昂贵的资源&#xff1a; 线程的创建和销毁成本很高&#xff0c;linux的线程实际上是特殊的进程&#xff1b;因此通常会使用线程池来减少线程创建和…

React中super() 和 super(props) 有什么区别?

面试官&#xff1a;super() 和 super(props) 有什么区别&#xff1f; 一、ES6 类 在 ES6 中&#xff0c;通过 extends 关键字实现类的继承&#xff0c;方式如下&#xff1a; class sup {constructor(name) {this.name name;}printName() {console.log(this.name);} }class s…

Android 13 - Media框架(27)- ACodec(五)

前面几节我们了解了OMXNodeInstance是如何处理setPortMode、allocateBuffer、useBuffer的&#xff0c;这一节我们再回到ACodec&#xff0c;来看看 ACodec start 的其他部分。 我们首先来回顾一下&#xff0c;ACodec start 的状态切换以及处理的事务&#xff0c;我们用一张不太准…

GBASE南大通用数据库-GBase 8a MPP Cluster之木桶效应降低技术

几千年前&#xff0c;因为金属冶炼、塑料成型技术不成熟&#xff0c;盛产在水源丰富的江南一带的用来洗衣服、盛水的容器都是用那种木板与竹钉合围并在外部用绳索、皮条之类紧箍起来的木桶&#xff0c;名字叫箍木桶。一个木桶由于老化或者损坏&#xff0c;桶上的个别木板发生断…

jsp+ssm+mysql实现的酒店预定管理系统项目----计算机毕业设计

项目介绍 jspssm框架&#xff08;spring、springMVC、mybaits&#xff09;实现的酒店预定管理系统的源码和视频开发教程。本系统分前台和后台管理两部分&#xff0c;前台实现了用户登录注册、查看房型信息、预定房间、提交订单、查看个人订单、修改个人资料等&#xff0c;后台…

RestClient操作索引库_创建索引库(二)

ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c; 通过http请求发送给ES。 官方文档地址: https://www.elastic.co/quide/en/elasticsearch/client/index.html 目录 一、初始化JavaRestClient 1.1.依赖引入 1.2.初始化…