一、选择题

1、以下代码的输出是(B)

std::map<int,int> m;
m[0] = 1;
m[1] = 2;
m[2] = 3;
m[3] = 4;
m[4] = 5;
for(auto it = m.begin(); it != m.end;)
{if(it->second ==2){m.erase(it++);printf("map after erase:%d\n",it->second);}else{++it;}
}
std:vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
for(auto it = v.begin();it != v.end();)
{if(*it == 2){v.erase(it++);printf("vector after erase:%d\n",*it);}else{++it;}
}

  A

map after erase:3
vector after erase:3

  B

map after erase:3
vector after erase:4

  C

map after erase:4
vector after erase:4

  D

map after erase:4
vector after erase:3

2、64位系统中以下结构体的大小为(C)

typedef struct
{unsigned int rztFlags;unsigned int nResultinfo;unsigned char* pResultInfo;int reserved[16];
}BMD_DataInfo;

  A 24
  B 76
  C 80
  D 88

  分析: 正确答案C,如果是 32 位系统 sizeof(BMD_DataInfo) = 76;如果是 64 位系统 sizeof(BMD_DataInfo) = 80;


3、下列哪项不是进程的标准状态(C)

  A 运行态
  B 就绪态
  C 调度态
  D 等待态

  分析: 进程的标准状态只有就绪态、运行态和等待态


4、32位系统上,以下程序的运行结果是(B)

void count(int* a,int b)
{static int c = 0;*a = ++c + *a + b;return;
}
int main(void)
{char* str = NULL;int i,sum = 0;str = (char*) malloc(16);memset(str,'0',16);strcpy(str,"12345678");for(i=0;i<sizeof(str);i++){count(&sum,str[i]-'0');}printf("%d\n",sum);return 0;
}

  A 14
  B 20
  C 72
  D 124

  分析: 这道题是一个小陷阱,粗心大意选成了 C,其实 malloc 确实申请了16 个字节大空间,但是在 for 循环时,i < sizeof(str) ,str 的类型是 char* 的指针,占用 4 个字节,也就是 i<4 (i =0,1,2,3)。当 i = 0 时,sum = 2;当 i = 1 时,sum = 6;当 i = 2 时,sum = 12;当 i = 3 时,sum = 20。


5、运行下面代码,结果是什么(B)

#include<iostream>
template <class T> void f(T & i)
{std::cout<<1;
}
tempalte <> void f(const int & i)
{std::cout<<2;
}
int main()
{int i = 42;f(i);
}

  A 1
  B 2
  C 编译错误
  D 未定义行为


6、关于引用和指针,下列用法正确的是(C)

  A char* pc = 0; char& rc = *pc;
  B std::string& rs; const std::string&rs = 0;
  C std::string rs; std::string *ps = &rs;

  分析: 在C++中 0 代表空指针,可以初始化指针变量,但是 A 选项的第二句解引用空指针,这就不对了,A错误;引用在定义时必须初始化,B错误;


7、下面代码输出(C)

#include<iostream>
struct X
{X(){std::cout<<"X";}
};
int main()
{X x();
}

  A X
  B XX
  C 无输出
  D 未定义行为


8、对于 n 个节点的单向链表(无表头节点),需要指针单元的个数至少为(C)

  A n-1
  B n
  C n+1
  D 2n

  分析: 在 n 个节点的单向链表(无表头节点)中,每个节点都有一个指针单元,即指针域,加上头指针,至少需要 n+1 个指针单元。


9、下面程序运行的结果是(B)

#include<iostream>
#include<map>
using namespace std;bool default_constructed = false;
bool constructed = false;
bool assigned = false;class C
{public:C(){default_constructed = true;}C(int){constructed = true;}C & operator =(const C&){assigned = true;return *this;}
}
int main()
{map<int,C> m;m[7] = C(1);cout << default_constructed << constructed << assigned;
}

  A 101
  B 111
  C 011
  D 110


10、std::map<key,value>,当key值不是非基本类型时,需要实现那个函数?()

  A operator<()
  B operator<<()
  C operator>>()
  D operator>()


11、下面哪项不是C语言常用的运行速度优化方法(D)

  A 查表
  B 用移位实现乘除法运算
  C 使用复合赋值表达式
  D 采用多层 for 循环


12、以下关于异常的描述,正确的是(A)

  A 异常发生后产生切换的上下文包括存储器中程序的代码和数据、它的栈、通用寄存器的内容、程序计数器、环境变量以及打开文件描述的集合
  B 异常处理函数执行过程中不可能产生上下文切换
  C 异常处理函数中可以对静态全局变量进行写操作
  D 异常和终端是不同的两种处理机制


13、下面选项属于函数指针的是(D)

  A (int ) func (int,int)
  B int
func(int int)
  C 两者都是
  D 两者都不是

  分析: A、B 选项都是指针函数,这个函数有两个 int 类型的参数,返回值是整型指针。


14、在下述函数中,如果传入的是一个 std::string & 进来,那么v会被推倒成()

template<typename T>
void print(T && v)
{}

  A string &&
  B string &
  C string
  D string *


15、下列资源一般不由操作系统管理的是(D)

  A 内存
  B 声卡
  C CPU
  D 以上皆非


16、使用以下哪种通信方式,尽量不要加锁(C)

  A 信号量
  B 信号
  C 共享内存
  D socket套接字


17、64位操作系统中给定以下结构体,问sizeof(A) = (B)

struct
{char t:4;char k:4;unsigned short i:8;unsigned char*p;unsigned long m;
}

  A 9
  B 16
  C 24
  D 40


18、32位设备下,下面哪个程序输出值最大( AD )

A

struct number
{char a;int b;short int c;
}
int main(int argc,char** argv)
{printf("%d\n",sizeof(number));return 0;
}

B

struct number
{int b;long int c;
}
int main(int argc,char** argv)
{printf("%d\n",sizeof(number));return 0;
}

C

struct number
{char a;char b;short int c;char d;
}
int main(int argc,char** argv)
{printf("%d\n",sizeof(number));return 0;
}

D

union number
{long int a;int b;char c;short int d;
}
int main(int argc,char** argv)
{printf("%d\n",sizeof(number));return 0;
}

  分析: A、D 选项的结果都是 12,B 选项的结果是 8 ,C 选项的结果是 6。


19、公有继承的情况下,基类的成员(私有成员除外)在派生类中的访问权限是以下哪种(B)

  A 受限制
  B 保持不变
  C 受保护
  D 不受保护


20、以下哪种方式不属于进程间通信方式(A)

  A 文件系统
  B 管道
  C 消息队列
  D 信号量


21、关于动态内存分配 的说法正确的是(C)

  A 动态内存分配在栈上分配空间
  B 动态内存分配在生命周期和所处的函数一致
  C 动态内存分配要小心内存释放
  D 动态内存分配不能超出物理内存的大小

  分析: 动态内存分配在堆区,由程序员自己动态开辟和回收,故 A、B 错误;动态内存分配大小不要超出 heap size 堆的大小,D 错误。


22、析构函数里面不能做的事情是(B)

  A 堆内存读写
  B 抛出异常
  C 临时智能指针中new对象
  D 成员对象的释放

  分析: 析构函数一般会释放对象所分配的资源,如果析构函数没有执行,那么这些资源就一直保留在内存中,这些资源没有得到释放,可能会导致内存泄露。所以析构函数中不能抛出异常。


23、在下述函数中,如果传入的是一个 std::string & 进来,那么v会被推倒成()

template<typename T>
void print(T && v)
{}

  A string &&
  B string &
  C string
  D string *


24、下面说法错误的是(B)

  A 构造函数不能声明成虚函数
  B 析构函数不能声明成虚函数
  C 虚函数的引入主要是为了实现多态
  D 虚函数在子类中一定要被重新实现

  分析: 构造函数不能声明成虚函数,析构函数可以声明成虚函数,而且有时候还必须声明成为虚函数。故 B 错误。


25、在嵌入式系统的存储部件中,存储速度最快的是(B)

  A 内存
  B 寄存器组
  C Flash
  D Cache

  分析: 嵌入式系统的存储结构采用分级的方法来设计,从而使得整个存储系统分为四级,即寄存器组、 高速缓冲 (Cache)、内存 (包括 flash)和外存,它们在存取速度上依次递减, 而在存储容量上逐级递增。


26、哪种方式是非对称式加密(B)

  A md5
  B rsa
  C sha256
  D des


27、下面程序的输出结果是多少( C )

#define sum(num1,num2) num1+num2
int main(int argc, char** argv)
{printf("%d\n",sum(sum(2,5),sum(4,10))*sum(2,3));return 0;
}

  A 51
  B 17
  C 34
  D 105

  分析: sum(sum(2,5),sum(4,10))*sum(2,3) 等价于 2 + 5 + 4 + 10 * 2 + 3 = 34


28、下面说法错误的是( B )

  A 析构函数不能声明成虚函数
  B 析构函数不能声明成虚函数
  C 虚函数的引入主要是为了实现多态
  D 虚函数在子类中一定要被重新实现


29、以下程序的运行结果是(A)

int x = 10;
int modifyvalue()
{return (x += 10);
}
int changevalue(int x)
{return (x -= 1);
}
void main()
{int x = 10;x++;changevalue(x);x++;modifyvalue();printf("First output:%d\n",x);x++;changevalue(x);printf("Second output:%d\n",x);modifyvalue();printf("Third output:%d\n",x);
}

  A 12,13,13
  B 22,23,23
  22,23,33
  D 12,13,23

  分析: 这就是传值和传址的区别,changevalue(x);传值时,形参是实参的一份临时拷贝,当函数调用完成之后,形参就会自动销毁,形参只在被调用的函数当中有效,出了被调函数它的生命周期也结束了。


30、在x64环境下,以下代码的输出是()

#include<stdio.h>
#include<vector>
class A
{public:A(){printf("this is A Construct\n");}virtual ~A(){printf("this is A Destruct\n");}void func0(){printf("this is A func0\n");}virtual void func1(){printf("this is A func1\n");}virtual void func2(){printf("this is A func2\n");}virtual void func3(){printf("this is A func3\n");}
};
class B:public A
{public:B(){printf("this is B Construct\n");}~B(){printf("this is B Destruct\n");}void func0(){printf("this is B func0\n");}virtual void func1(){printf("this is B func1\n");}virtual void func2(){printf("this is B func2\n");}virtual void func3(){printf("this is B func3\n");}
};
int main()
{typedef void(*FUNC){};A* a =  new B();long long *p = (long long*)(*(long long*)a);FUNC f = (FUNC)(p[2]);f();delete a;return 0;
}

  A

this is A Constuct
this is B Constuct
this is B func0
this is B Desturct
this is A Destruct

  B

this is A Constuct
this is B Constuct
this is B func1
this is B Desturct
this is A Destruct

  C

this is A Constuct
this is B Constuct
this is B func2
this is B Desturct
this is A Destruct

  D

this is A Constuct
this is B Constuct
this is B func3
this is B Desturct
this is A Destruct

二、填空题

  31、虚继承主要为了解决(多重继承)问题。

  32、有一个双向循环链表,每个节点中有指针pre和next分别指向前一个和后一个节点,现需要将ins节点插入到cur节点之后,请补充代码:

cur->next_>pre=ins;
ins->next=cur->next->next;
ins->pre = cur;

  33、32位设备下,sizeof(0xAABBCCDD)的值是多少? (4)

  34、shared_ptr是通过(引用计数)方式来实现多个share_ptr对象之间的资源共享。

  35、假设a为无符号整型,则a%1024 == a__(1024-1);


三、编程题

  36、不调用C/C++的字符串库函数,请编写函数strcpy。

char * strcpy(char * strDest,const char * strSrc)
{assert(strDest && strSrc) //  [1]char * strDestCopy = strDest;      //  [2]while ((*strDest++ = *strSrc++)!='\0');   //[3]return strDestCopy;
}

  37、通过C++11模板元编程,实现一个功能判断一个模板参数是否为智能指针。

#include <iostream>
#include <tr1/memory>
#include <typeinfo>
#include <vector>
using namespace std;template<typename T>
struct smart_ptr_checker {enum {value = false};typedef long type;
};template<template<typename> class P, typename T>
struct smart_ptr_checker< P<T> > {enum {value = true};template<typename C> static bool test( typeof(&C::operator->) );template<typename C> static long test(...);typedef typeof(test<P<T> >(0)) type;
};int main()
{cout << typeid(smart_ptr_checker<int>::type).name() << endl;  // longcout << typeid(smart_ptr_checker<tr1::shared_ptr<int> >::type).name() << endl;  // boolcout << typeid(smart_ptr_checker<vector<int> >::type).name() << endl;  // longreturn 0;
}

  如果是A为智能指针类,则smart_ptr_checker< A>::type == bool;否则 smart_ptr_checker< A>::type == long。

【每日一题】(D0723)strcpy 智能指针相关推荐

  1. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  2. C++——智能指针——auto_ptr、shared_ptr、unique_ptr

    1.4.智能指针 智能指针是行为类似于指针的类对象. C++11 中提供了三种智能指针,使用这些智能指针时需要引用头文件 : ·shared_ptr; ·unique_ptr; ·auto_ptr; ...

  3. 老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

    MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 show slave status; 报错:且show slave status\G Slave_I/O_Running: ...

  4. C++中各种智能指针的实现及弊端(四)

    C++中各种智能指针的实现及弊端(四) 文章目录 C++中各种智能指针的实现及弊端(四) 一.std::shared_ptr 二.std::shared_ptr的线程安全问题: 一.std::shar ...

  5. C++中各种智能指针的实现及弊端(二)

    C++中各种智能指针的实现及弊端(二) 文章目录 C++中各种智能指针的实现及弊端(二) 一:实现auto_ptr 二.auto_ptr的问题及解决办法 一:实现auto_ptr C ++98版本的库 ...

  6. C++ — 智能指针的简单实现以及循环引用问题

    http://blog.csdn.net/dawn_sf/article/details/70168930 智能指针 _________________________________________ ...

  7. 【C++11新特性】 C++11智能指针之weak_ptr

    http://blog.csdn.net/xiejingfa/article/details/50772571 原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/ar ...

  8. 浅谈auto_ptr智能指针

    引入智能指针: 智能指针的实现原理: 资源分配即初始化RAII(Resource Acquisition Is Initialization): 定义一个类来封装资源的分配和释放,在构造函数完成资源的 ...

  9. c++11新特性_【C++11新特性】 C++11智能指针之weak_ptr

    如题,我们今天要讲的是 C++11 引入的三种智能指针中的:weak_ptr. 在学习 weak_ptr 之前最好对 shared_ptr 有所了解.如果你还不知道 shared_ptr 是何物,可以 ...

  10. C++新特性探究(十八):智能指针

    一.智能指针及RAII 问题:   C++中最令人头疼的问题是强迫程序员对申请的资源(文件,内存等)进行管理,一不小心就会出现泄露(忘记对申请的资源进行释放)的问题. C++的解决办法:RAII    ...

最新文章

  1. 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
  2. python初学者之网络爬虫_Python初学者之网络爬虫(二)
  3. USACO1.4.2(The clocks)BFS
  4. Protobuf从安装到配置整理帖
  5. matlab播放 视频帧,如何把连续视频帧转为视频的matlab代码 | 学步园
  6. [CQOI2012]模拟工厂 题解(搜索+贪心)
  7. [Leedcode][JAVA][第837题][新21点][动态规划][数学]
  8. 真格量化-隐含波动率计算
  9. python-kafka 常用 api 汇总
  10. docker添加新的环境变量_Docker环境变量
  11. android小记之FTP文件上传
  12. 数据结构员工通讯录管理系统 C语言,数据结构课程设计报告单位员工通讯录管理系统.doc...
  13. 做点RouteOS方面的备忘,关于流量监控限速的
  14. Missing artifact XXXXX:jar:1.9.1 解决错误问题
  15. 洛谷——P1830 轰炸III
  16. 解决Win7上的连接access数据库的问题
  17. Android Theme.AppCompat 和 ThemeOverlay.AppCompat
  18. 自动回复html模板邮件,outlook休假自动回复
  19. 绘制一幅蓝图_给未来画一幅蓝图
  20. 【原创】机器学习一般流程总结

热门文章

  1. 电脑系统声音怎么录制 如何录制电脑内部音频
  2. MWEC:一种基于多语义词向量的中文新词发现方法
  3. Java EE开发系列教程 - 使用EJB组件与JPA层交互
  4. python修改表格居中_python修改表格居中_CSS样式更改——列表、表格和轮廓
  5. did双重差分法_二重差分法分析(DID)
  6. 《SEM长尾搜索营销策略解密》一一2.2 互联网里的长尾更具影响力
  7. [FOI2020]楼房搭建
  8. C++ fstream详解
  9. 计算机专业普通的期刊,计算机类的普通期刊
  10. python断言语句_Python断言assert的用法代码解析