C/C++面试:容器的元素可以声明引用类型吗?
发布日期:2022-03-16 03:25:36 浏览次数:40 分类:技术文章

本文共 856 字,大约阅读时间需要 2 分钟。

答案

不能

原因

C++ 容器要求元素具有 object type,引用不是 object type

#include 
#include
using namespace std;class test {
};typedef boost::shared_ptr
test_ptr;int main(){
vector
tmp; vector
tmp1;    //小心内存泄露,重复析构等问题 //vector
tmp;    //直接编译通不过 vector
tmp2; //vector
tmp3;  //即使是boost的智能指针的引用也不行 return 0;}

c++ 的 STL 中主要有 vector , list, map, set , multimap,multiset ,这些容器都要求元素类型满足以下2种情况:

  • 能被复制:向这些容器添加新元素时,容器会复制一份自己的版本,这要求容器使用的元素类型可以被复制,也就是说类类型需要复制构造函数的支持
  • 能被复制:在使用容器的删除、查找、访问、使用迭代器修改元素等许多情况下,都需要元素的赋值操作支持,类类型需要赋值操作符运算的支持

vector、list 中的单参数的resize 操作需要默认初始化指定个数的元素,类类型需要无参数的默认构造函数支持初始化。

set、multiset, map和multimap中的键类型、 list 中的sort 操作 都需要 < 比较操作来排序,类类型需要 < 操作符运算的支持。

在STL中,容器的元素要满足三个基本要求:可拷贝(copyable)、可赋值(assignable)、可析构(destroyable)。基本数据类型和自定义的类都满足这些条件,但是引用不满足,因为引用不能析构

转载地址:https://blog.csdn.net/zhizhengguan/article/details/122658722 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法:用于字符串匹配的BF 算法和RK算法
下一篇:操作系统面试:什么是进程

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月18日 12时53分40秒