C++面试题之容器
c++高级面试题

C++高级面试题
1.请解释C++中的多态性,以及它是如何实现的?
2.什么是虚函数?它在C++中的作用是什么?
3.什么是析构函数?它在C++中的作用是什么?
4.什么是深拷贝和浅拷贝?它们在C++中的区别是什么?
5.什么是STL?它在C++中的作用是什么?
6.什么是RAII?它在C++中的作用是什么?
7.什么是异常处理?在C++中如何实现异常处理?
8.什么是智能指针?它在C++中的作用是什么?
9.什么是Lambda表达式?它在C++中的作用是什么?
10.什么是STL容器?它们在C++中的作用是什么?
11.什么是STL算法?它们在C++中的作用是什么?
12.什么是模板元编程?它与普通模板有什么不同?
13.请解释C++中的内存模型,以及它对多线程编程的影响。
14.请解释C++中的命名空间,以及它是如何解决命名冲突的。
15.什么是STL中的容器的内存模型,以及它们如何进行内存管理?
16.什么是C++中的友元函数,以及它是如何工作的?
17.请解释C++中的std::move语义,以及它对资源管理的影响。
18.什么是C++中的函数指针,以及它与函数对象的区别是什么?
19.请解释C++中的STL中的迭代器,以及它与指针的区别是什么?
20.请解释C++中的constexpr关键字,以及它对编译时计算的影响。
c语言经典面试题

C语言面试题大汇总之华为面试题1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::";局部变量可以与全局变量同名,在函数引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数可以定义多个同名的局部变量,比如在两个循环体都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体。
2、如何引用一个已经定义过的全局变量?答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.4、请写出下列代码的输出容#include <stdio.h>int main(void){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}答:10,12,1205、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
容器技术考试题库及答案

容器技术考试题库及答案容器技术是一种轻量级、可移植的、自给自足的软件运行环境,它允许开发者打包他们的应用以及应用的所有依赖项到一个可移植的容器中。
以下是一些容器技术相关的考试题库及答案:单选题1. 容器技术的核心概念是什么?- A. 虚拟化- B. 容器化- C. 微服务- D. 持续集成答案:B. 容器化2. Docker 是什么?- A. 一个操作系统- B. 一个容器化平台- C. 一个编程语言- D. 一个数据库管理系统答案:B. 一个容器化平台3. Kubernetes 是用来做什么的?- A. 容器化应用的编排- B. 操作系统- C. 编程语言- D. 数据库答案:A. 容器化应用的编排4. 以下哪个不是容器技术的优点?- A. 快速启动- B. 资源占用大- C. 易于迁移- D. 版本控制答案:B. 资源占用大5. 容器镜像是什么?- A. 容器的运行时状态- B. 容器的只读模板- C. 容器的配置文件- D. 容器的日志文件答案:B. 容器的只读模板多选题6. 容器技术可以用于哪些场景?- A. 持续集成和持续部署- B. 微服务架构- C. 虚拟化基础设施- D. 应用打包和分发答案:A, B, D7. 容器技术与虚拟机技术相比有哪些优势? - A. 更快的启动时间- B. 更低的资源消耗- C. 更强的隔离性- D. 更高的安全性答案:A, B判断题8. 容器技术可以运行在任何操作系统上。
()答案:错误。
容器技术通常需要宿主机操作系统的支持,但容器内部可以运行不同的操作系统。
9. Dockerfile 是用来编写 Docker 容器配置文件的脚本。
()答案:正确。
10. Kubernetes 可以管理多个容器实例,但不支持自动扩展。
()答案:错误。
Kubernetes 支持容器实例的自动扩展。
简答题11. 描述 Docker 的工作流程。
答案:Docker 的工作流程包括创建镜像、构建容器、运行容器、管理容器等步骤。
c stl面试题

c stl面试题C++ STL面试题1. 介绍STL(Standard Template Library)STL(标准模板库)是C++的一个重要组成部分,它包含了一系列的通用模板类和函数,提供了常用的算法、容器和迭代器等组件,用于解决各种常见的编程问题。
STL的设计灵感来自于泛型编程和模板元编程的思想,其目的是为了提供高效、灵活且易于使用的工具,加快开发过程,同时提高代码的可重用性和可维护性。
2. STL的核心组件STL主要由以下三个核心组件构成:- 算法(Algorithms):STL提供了丰富的算法库,包括排序、查找、复制、遍历等各种常见操作。
这些算法实现了通用的操作逻辑,可用于各种容器类型。
- 容器(Containers):STL提供了多种容器,如向量(vector)、链表(list)、集合(set)、映射(map)等。
每种容器都有各自的特点和适用场景,可以根据需求选择合适的容器。
- 迭代器(Iterators):STL的迭代器提供了一种统一的访问数据元素的方式,使得算法和容器之间可以独立地操作。
迭代器将指针的概念抽象化,可以适用于不同类型的容器。
3. STL的优势STL的设计和实现考虑了很多实际的问题,并具有以下优势:- 高度的模块化:STL的各个组件相互之间独立,可以根据需要单独使用。
这种模块化架构提供了高度的灵活性,可以根据具体的需求选择使用不同的组件。
- 高效的实现:STL的组件经过精心设计和优化,使用了丰富的数据结构和算法,以达到最佳的性能和内存利用率。
使用STL可以在不影响代码质量的前提下提高开发效率。
- 丰富的功能:STL提供了一系列常见的数据结构和算法,可以直接使用或进行扩展。
无需从头开始实现各种常见的功能,减少了代码量和开发时间。
- 增强了代码的可读性和可维护性:STL的组件使用了一致的命名规范和接口设计,代码风格统一,易于理解和维护。
同时,STL的常见模式和惯用法使得代码更易于阅读和重用。
stl面试题

stl面试题1. 什么是STL?STL(Standard Template Library)是C++标准库的一部分,提供了一系列的数据结构和算法,以便开发者更加方便地进行软件开发。
STL 的设计目标是提供通用的、高效的、易用的模板类和函数,以支持各类常见的编程任务。
2. STL的基本组成部分STL主要由以下三个组件构成:a) 容器(Containers):用于存储各种类型的数据,如vector、list、deque、set、map等。
b) 算法(Algorithms):提供了一系列的算法,比如排序、查找、合并等操作,可以用于容器中的数据。
c) 迭代器(Iterators):充当容器和算法之间的桥梁,用于遍历容器中的元素。
3. STL常用容器及其特点STL提供了多种容器,每种容器都有各自的特点和适用场景。
以下是一些常用容器及其特点:a) vector:动态数组,支持快速随机访问,但在插入和删除元素时效率较低。
b) list:双向链表,支持快速插入和删除元素,但随机访问效率较低。
c) deque:双端队列,支持在两端进行快速插入和删除操作。
d) set:有序集合,内部元素自动排序,不允许重复元素。
e) map:有序键值对集合,内部元素按键排序,并且每个键只能对应一个值。
4. STL常用算法及其应用STL提供了丰富的算法,可以在各种容器上进行操作,以下是一些常用算法及其应用场景:a) find:在容器中查找指定元素,用于快速查找数据。
b) sort:对容器中的元素进行排序,用于按照一定规则重新排列数据。
c) merge:将两个有序容器合并为一个有序容器,用于合并多个有序数据集。
d) unique:移除容器中的重复元素,用于去重操作。
e) count:统计容器中指定元素出现的次数,用于计数操作。
5. STL迭代器的使用STL迭代器是一种模板类,用于遍历容器中的元素。
迭代器提供了类似指针的操作接口,可以通过解引用操作符来访问元素,使用自增运算符进行遍历。
C与C++经典面试题(内存泄露)

C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
3.4一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的。(Autodesk)
答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行),再执行成员对象的,最后执行自己的。
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != ‘\0’)
3.9.2那为什么有了new/delete,还要malloc/free呢?
3.10 #define DOUBLE(x) x+x (Autodesk)
i = 5*DOUBLE(10);i是多少?正确的声明是什么?
答案:i为60。正确的声明是#define DOUBLE(x) (x+x)
3.11有哪几种情况只能用intialization list而不能用assignment? (Autodesk)
掌握的页面替换算法nru最近不用fifo第二次机会页面替换算法lru最近最少使用算法315有四个同样的容器里面装满了粒数相同的药丸正常药丸的质量为m变质药丸的质量为m1现在已知这四个容器中有一个装的全是变质药丸用电子秤只称一次找出哪个容器装的是变质药丸microsoft答案
c语言 面试题
c语言面试题C语言面试题C语言是一门广泛应用于系统编程和嵌入式系统开发的高级编程语言。
它具有高效、可移植性强和强大的功能等特点,因此在计算机科学领域得到广泛应用。
对于求职者来说,掌握C语言的基本知识和面试技巧是非常重要的。
下面是一些常见的C语言面试题,希望能够帮助你更好地应对面试。
1. 请解释以下几个概念:变量、数据类型、运算符、表达式。
在C语言中,变量是一种用于存储数据的容器,它具有一个特定的名称和数据类型。
数据类型定义了变量可以存储的值的范围和操作。
运算符是用于在表达式中执行特定操作的符号。
表达式由变量、常量、运算符和函数调用组成,可以用于执行特定计算或操作。
2. 请解释以下几种数据类型:整型、浮点型、字符型。
整型数据类型用于存储整数值,包括int、short和long等。
浮点型数据类型用于存储带小数的数值,包括float和double等。
字符型数据类型用于存储单个字符,使用char关键字。
3. 请解释以下几个关键字:const、static、volatile。
const用于定义常量,一旦被赋值后就不能再被修改。
static用于控制变量和函数的作用域,以及为变量提供持久性。
volatile用于告诉编译器,该变量的值可能会被意外的改变,需要在每次访问时重新读取。
4. 请解释以下几个控制语句:if语句、switch语句、for循环、while 循环。
if语句用于根据条件执行不同的代码块。
switch语句根据表达式的值选择不同的分支执行。
for循环用于重复执行一段代码,通常需要指定循环的起始值、结束条件和每次迭代后的操作。
while循环会在满足条件的情况下一直执行一段代码块。
5. 请解释以下几个指针相关的概念:指针、引用、地址。
指针是一个变量,可以存储另一个变量的内存地址。
引用是一个已存在的变量的别名,它使用与原变量相同的内存空间。
地址是一个变量在内存中的位置,可以通过指针获取。
6. 请解释以下几个内存管理相关的概念:堆、栈、动态内存分配。
c++ 线程池面试题
线程池是一个用于管理线程的容器,它可以预先创建一组线程并保存在内存中,以避免频繁地创建和销毁线程。
以下是一些可能的C++线程池面试题:
1.什么是线程池?它的主要作用是什么?
2.线程池的主要组成部分有哪些?
3.如何实现一个简单的线程池?
4.线程池如何处理任务的调度和执行?
5.线程池如何管理线程的生命周期?
6.线程池如何处理任务的优先级和调度策略?
7.线程池如何处理任务的超时和取消?
8.线程池如何扩展和缩减大小?
9.线程池如何进行性能优化和调优?
10.线程池在实际应用中需要注意哪些问题?
这些问题可以帮助你了解应聘者对线程池的理解和实现经验,以及他们在实际应用中如何解决遇到的问题。
c stl面试题
c stl面试题C++ STL面试题导言:C++标准模板库(STL)是C++的重要组成部分,它提供了丰富的模板类和函数,用于增强C++的数据结构和算法能力。
在C++开发中,STL的掌握和应用是衡量一个开发者水平的重要指标之一。
本文将介绍一些常见的C++ STL面试题,帮助读者提升自己在STL方面的知识和技能。
一、容器类1. vector与list的区别是什么?vector和list都是常用的容器类,但在内部实现和使用上有一些区别。
- 内部实现:vector是基于动态数组的,可以快速随机访问元素,而list是基于双向链表的,插入和删除操作比较快。
- 内存占用:vector在内存中连续存储元素,所以占用的内存较少;而list是不连续存储,每个元素都有一个指针指向下一个元素,所以占用的内存较多。
- 插入和删除操作:vector在头尾以外的位置插入和删除元素的代价比较大,而list可以在任意位置高效地插入和删除。
2. 如何遍历一个vector?可以使用迭代器或者基于范围的for循环来遍历一个vector。
- 迭代器遍历:```cppstd::vector<int> vec = {1, 2, 3, 4, 5};for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " ";}```- 基于范围的for循环:```cppstd::vector<int> vec = {1, 2, 3, 4, 5};for (const auto& num : vec) {std::cout << num << " ";}```3. 如何在vector中查找指定元素?可以使用`std::find`函数来在vector中查找指定元素。
C++面试常见100题
C++面试常见100题1. 什么是C ++?它的优点是什么?2. C++和C的主要区别是什么?3. C++的基本语法、数据类型和控制结构?4. 定义和使用指针。
5. 定义和使用引用。
6. 什么是类?类的组成成分是什么?7. 什么是继承?派生类可以访问基类的哪些成员?8. 什么是多态?虚函数的作用?9. 什么是纯虚函数?10. 什么是数据封装?为什么需要数据封装?11. 什么是构造函数和析构函数?它们的作用是什么?12. 什么是拷贝构造函数和拷贝赋值运算符?它们的作用是什么?13. C++中的运算符重载和函数重载有什么区别?14. 什么是友元函数和友元类?15. 什么是异常处理?C++中的异常处理机制是什么?16. 什么是RAII?17. 什么是模板类和模板函数?18. STL中的容器、算法和迭代器有哪些?19. 什么是智能指针?20. 什么是虚拟函数?为什么需要虚拟函数?21. 什么是纯虚函数?为什么需要纯虚函数?22. 什么是多重继承?23. 什么是模板特化?24. C++中的多线程有哪些特点?25. Linux下如何使用多线程?26. 什么是死锁?如何避免死锁?27. 什么是进程和线程?它们的区别是什么?28. 什么是信号和信号处理?29. 什么是文件操作?C++中的文件操作函数有哪些?30. 什么是网络编程?C++中的网络编程函数有哪些?31. 什么是数据库操作?C++中的数据库操作函数有哪些?32. 什么是多态?如何实现多态?33. C++中有哪些常用的设计模式?34. 如何进行性能优化?35. C++11和C++14中的新特性有哪些?36. const关键字的作用是什么?37. static关键字的作用是什么?38. inline关键字的作用是什么?39. sizeof运算符的作用是什么?40. C++中的数据类型有哪些?它们的区别是什么?41. 什么是指针和引用?42. 什么是动态内存分配?C++中的动态内存分配函数有哪些?43. 什么是类和对象?如何定义和使用类和对象?44. 什么是构造函数和析构函数?它们的作用是什么?45. 什么是拷贝构造函数和拷贝赋值运算符?它们的作用是什么?46. C++中的运算符重载和函数重载有什么区别?47. 什么是友元函数和友元类?48. 什么是异常处理?C++中的异常处理机制是什么?49. 什么是RAII?50. 什么是模板类和模板函数?51. STL中的容器、算法和迭代器有哪些?52. 什么是智能指针?53. 什么是虚拟函数?为什么需要虚拟函数?54. 什么是纯虚函数?为什么需要纯虚函数?55. 什么是多重继承?56. 什么是模板特化?57. C++中的多线程有哪些特点?58. Linux下如何使用多线程?59. 什么是死锁?如何避免死锁?60. 什么是进程和线程?它们的区别是什么?61. 什么是信号和信号处理?62. 什么是文件操作?C++中的文件操作函数有哪些?63. 什么是网络编程?C++中的网络编程函数有哪些?64. 什么是数据库操作?C++中的数据库操作函数有哪些?65. 什么是多态?如何实现多态?66. C++中有哪些常用的设计模式?67. 如何进行性能优化?68. C++11和C++14中的新特性有哪些?69. const关键字的作用是什么?70. static关键字的作用是什么?71. inline关键字的作用是什么?72. sizeof运算符的作用是什么?73. C++中的数据类型有哪些?它们的区别是什么?74. 什么是指针和引用?75. 什么是动态内存分配?C++中的动态内存分配函数有哪些?76. 什么是类和对象?如何定义和使用类和对象?77. 什么是构造函数和析构函数?它们的作用是什么?78. 什么是拷贝构造函数和拷贝赋值运算符?它们的作用是什么?79. C++中的运算符重载和函数重载有什么区别?80. 什么是友元函数和友元类?81. 什么是异常处理?C++中的异常处理机制是什么?82. 什么是RAII?83. 什么是模板类和模板函数?84. STL中的容器、算法和迭代器有哪些?85. 什么是智能指针?86. 什么是虚拟函数?为什么需要虚拟函数?87. 什么是纯虚函数?为什么需要纯虚函数?88. 什么是多重继承?89. 什么是模板特化?90. C++中的多线程有哪些特点?91. Linux下如何使用多线程?92. 什么是死锁?如何避免死锁?93. 什么是进程和线程?它们的区别是什么?94. 什么是信号和信号处理?95. 什么是文件操作?C++中的文件操作函数有哪些?96. 什么是网络编程?C++中的网络编程函数有哪些?97. 什么是数据库操作?C++中的数据库操作函数有哪些?98. 什么是多态?如何实现多态?99. C++中有哪些常用的设计模式?100. 如何进行性能优化?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标准模板库==头文件==#ifndef PRINT_H#define PRINT_H 1//输出一个指定区间中的所有数据(含头不含尾)#include <iostream>using namespace std;template <typename T>void print(T b,T e,char c=' '){while(b!=e)cout<<*b++<<c;cout<<endl;}#endif-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-/*标准容器(类模板)共性:构造函数:无参构造,拷贝构造,区间构造(两个迭代器表示的两个位置)析构:迭代器相关:正向.begin(), .end(), 反向.rbegin(), .rend()iterator,reverse_iterator,const_iterator,const_reverse_irerator* -> = ++ == != --插入:isert(pos,element),其中pos表示插入为位置,是一个迭代器删除:.erase(pos), erase(pos_beg,pos_end)清除:.clear()大小:.size(), .max_size(), .empty()交换:.swap(c2), swap(c1,c2)运算符:= > < >= <= == !=*/#include <iostream>#include <vector>#include <algorithm>using namespace std;#include "print.h"int main(){int a[5]={33,11,55,22,44};vector<int> vi(a,a+5);//创建一个数据空间cout<<vi.size()<<endl;sort(vi.begin(),vi.end());vector<int>::iterator b=vi.begin();while(b!=vi.end())cout<<*b++<<' ';cout<<endl;for(int i=0;i<5;i++)cout<<a[i]<<' ';cout<<endl;print(vi.begin(),vi.end());print(a,a+5); print(vi.rbegin(),vi.rend());b=vi.begin();vi.insert(++++b,66);//在指定位置插入数据vi.insert(vi.begin(),77); vi.insert(vi.end(),88);print(vi.begin(),vi.end());cout<<vi.size()<<'/'<<vi.max_size()<<endl;vi.erase(------vi.end());//删除指定位置的元素print(vi.begin(),vi.end());vi.erase(++++vi.begin(),--vi.end());//删除区间print(vi.begin(),vi.end());vector<int> v2(a,a+5);print(v2.begin(),v2.end());vi.swap(v2);cout<<"---------------------------"<<endl;print(vi.begin(),vi.end());print(v2.begin(),v2.end());swap(vi,v2);cout<<"---------------------------"<<endl;print(vi.begin(),vi.end()); print(v2.begin(),v2.end());vector<int> t=vi; vi=v2; v2=t;cout<<"========================="<<endl;print(vi.begin(),vi.end()); print(v2.begin(),v2.end());vi.clear();cout<<vi.size()<<endl;print(vi.begin(),vi.end());vector<int> x;cout<<"vector当前容量:"<<x.capacity()<<endl; }/*511 22 33 44 5533 11 55 22 4411 22 33 44 5533 11 55 22 4455 44 33 22 1177 11 22 66 33 44 55 888/107374182377 11 22 66 33 55 8877 11 8833 11 55 22 44---------------------------33 11 55 22 4477 11 88---------------------------77 11 8833 11 55 22 44=========================33 11 55 22 4477 11 88vector当前容量:0*/-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-vector容器共性#include <iostream>#include <vector>#include <algorithm>using namespace std;#include "print.h"int main(){int a[5]={33,11,55,22,44};vector<int> vi(a,a+5);//创建一个数据空间cout<<vi.size()<<endl;sort(vi.begin(),vi.end());vector<int>::iterator b=vi.begin();while(b!=vi.end())cout<<*b++<<' ';cout<<endl;for(int i=0;i<5;i++)cout<<a[i]<<' ';cout<<endl;print(vi.begin(),vi.end());print(a,a+5);print(vi.rbegin(),vi.rend());b=vi.begin();vi.insert(++++b,66);//在指定位置插入数据vi.insert(vi.begin(),77);vi.insert(vi.end(),88);print(vi.begin(),vi.end());cout<<vi.size()<<'/'<<vi.max_size()<<endl;vi.erase(------vi.end());//删除指定位置的元素print(vi.begin(),vi.end());vi.erase(++++vi.begin(),--vi.end());//删除区间print(vi.begin(),vi.end());vector<int> v2(a,a+5);print(v2.begin(),v2.end());vi.swap(v2);cout<<"---------------------------"<<endl;print(vi.begin(),vi.end());print(v2.begin(),v2.end());swap(vi,v2);cout<<"---------------------------"<<endl;print(vi.begin(),vi.end());print(v2.begin(),v2.end());vector<int> t=vi;vi=v2;v2=t;cout<<"========================="<<endl;print(vi.begin(),vi.end());print(v2.begin(),v2.end());vi.clear();cout<<vi.size()<<endl;print(vi.begin(),vi.end());vector<int> x;cout<<"vector当前容量:"<<x.capacity()<<endl; }/*511 22 33 44 5533 11 55 22 4411 22 33 44 5533 11 55 22 4455 44 33 22 1177 11 22 66 33 44 55 888/107374182377 11 22 66 33 55 8877 11 8833 11 55 22 44---------------------------33 11 55 22 4477 11 88---------------------------77 11 8833 11 55 22 44=========================33 11 55 22 4477 11 88vector当前容量:0*/-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-/*序列式容器的共性:vector,deque,list构造函数:插入:.insert(pos,element),.insert(pos,pos_beg,pos_end)//在pos处插入一个区间的数据赋值:.assign(n,element), .assign(pos_beg,pos_end)调整:.resize(n,element=零初始化)首尾:.front(), .back() //取出首尾的值增删:.push_back(element), .pop_back()只删除,返回void*/#include <iostream>#include <deque>#include <string>using namespace std;#include "print.h"int main(){deque<string> ds;//deque< vector<int> >ds.push_back("郭靖");ds.push_back("黄蓉");ds.push_back("杨过");ds.push_back("小龙女");print(ds.begin(),ds.end(),',');ds.insert(++++ds.begin(),2,"张无忌");print(ds.begin(),ds.end(),',');string s[3]={"乔峰","虚竹","段誉"};ds.insert(----ds.end(),s,s+3);//在----ds.end()处插入s到(s+3)的数据print(ds.begin(),ds.end(),',');ds.pop_back();ds.pop_back();//两次从末尾删除一个元素print(ds.begin(),ds.end(),',');cout<<"front:"<<ds.front()<<",back:"<<ds.back()<<endl;ds.resize(12,"东邪");print(ds.begin(),ds.end(),',');ds.assign(5,"西毒");//给ds赋值(会覆盖原值)print(ds.begin(),ds.end(),',');ds.front()="南帝";ds.back()="北丐"; //front()和back()返回的是原数据的引用,可以直接修改print(ds.begin(),ds.end(),',');}-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-/*vector的个性:当前容量:.capaicty()取得目前已经分配的空间能放多少元素约定容量:.reserve(n)下标[]: .operator[](i)不检查越界,.at(i)越界跑出异常*/#include <iostream>#include <vector>using namespace std;#include "print.h"#include <exception>#include <typeinfo>int main(){vector<double> vd, vv;//可以代替数组,能完成很多数组无法完成的功能for(int i=0;i<9;i++){vd.push_back(i+0.1);cout<<&*vd.begin()<<':';cout<<vd.size()<<'/'<<vd.capacity()<<endl;}cout<<"--------1---------"<<endl;vv.reserve(9);for(int i=0;i<9;i++){vv.push_back(i+0.1);cout<<vv.size()<<'/'<<vv.capacity()<<endl;}vd[3]=123.45;vv.at(5)=67.8;cout<<"--------2---------"<<endl;for(int i=0;i<=vd.size();i++)cout<<vd[i]<<' ';cout<< endl;cout<<"--------3---------"<<endl;try{for(int i=0;i<=vv.size();i++)cout<<vv.at(i)<<' ';cout<< endl;}catch(exception& e){cout<<"异常:"<<e.what()<<endl;cout<<"类型:"<<typeid(e).name()<<endl;int m=3,n=5;vector< vector<int> > vvi(m,vector<int>(n));//等同于二维数组//vector< vector<int> > vvi; 效果相同vvi.resize(m+3);//指定大小为(m+3)行vvi[1].assign(9,1);//给第二行元素赋值9个1vvi[5].assign(4,5);void print(const vector< vector<int> >& v);print(vvi);}void print(const vector< vector<int> >& v){for(int i=0;i<v.size();i++){for(int j=0;j<v[i].size();j++){cout<<v[i][j]<<' ';}cout<<endl;}}template <typename T>void show(T a[],int n);template <typename T>void show(const vector<int>& v);/*0x804e008:1/10x804e018:2/20x804e030:3/40x804e030:4/40x804e058:5/80x804e058:6/80x804e058:7/80x804e058:8/80x804e0a0:9/16--------1---------1/92/93/94/95/96/97/99/9--------2---------0.1 1.1 2.1 123.45 4.1 5.1 6.1 7.1 8.1 0--------3---------0.1 1.1 2.1 3.1 4.1 67.8 6.1 7.1 8.1 异常:vector::_M_range_check 类型:St12out_of_range0 0 0 0 01 1 1 1 1 1 1 1 10 0 0 0 05 5 5 5*/-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-/*deque的个性:double-ended queue 双端队列下标[]: .operator[](i)不检查越界,.at(i)越界抛异常增删:.push_front(element), .pop_front() 可以从前后增删数据*/#include <iostream>using namespace std;#include <deque>#include "print.h"int main(){deque<char> dc;dc.push_back(97);dc.push_back('c');dc.push_front('s');dc.push_front('d');dc.push_back('k');dc.push_back('$');print(dc.begin(),dc.end());dc[1]='t';for(int i=0;i<dc.size();i++)cout<<dc[i]<<',';cout<<endl;dc.pop_back();dc.pop_front();print(dc.begin(),dc.end());}-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-/*list的个性:双向链表增删:.push_front(element), .pop_front(),.remove(element)//需要==运算符,表示删除等于“element”的所有元素不支持下标[]除重:.unique()相邻的重复元素只保留一个排序:.sort(compare_func=less)默认用小于符号比较,从小到大排序倒置:.reverse()颠倒链表中的元素转移:.splice(pos,list2)把list2链表中的所有元素转移到指定位置.splice(pos,list2,pos2),.splice(pos,list2,pos_beg,pos_end)归并:.merge(list2)*/#include <iostream>using namespace std;#include <list>#include "print.h"#include <cassert>bool compare(int x,int y)//自定排序规则{x%=3,y%=3;return x<y;}int main(){int a[]={3,8,8,8,5,5,1,8,8,7};int b[6]={9,3,5,2,7,6};list<int> li(a,a+10), lili(b,b+6);print(li.begin(),li.end());li.unique();print(li.begin(),li.end());li.sort();print(li.begin(),li.end());li.unique();print(li.begin(),li.end());li.reverse();print(li.begin(),li.end());li.splice(li.begin(),lili);print(li.begin(),li.end());assert(lili.empty());//判断是否为空li.remove(5); //删除所有的5print(li.begin(),li.end());li.sort();li.unique();print(li.begin(),li.end());lili.push_back(0);lili.push_back(4);lili.push_back(5);lili.push_back(7);lili.push_back(10);lili.sort();print(lili.begin(),lili.end());li.merge(lili);//将两个排好序的链表归并print(li.begin(),li.end());lili.assign(b,b+6);print(lili.begin(),lili.end());lili.sort(greater<int>());//从大到小排序print(lili.begin(),lili.end());lili.sort(compare);print(lili.begin(),lili.end());}。