-
C++ STL的发展历程是怎么样的?
所属栏目:[语言] 日期:2023-06-08 热度:334
Alexander Stepanov(后被誉为 STL 标准模板库之父,后简称 Stepanov),1950 年出生与前苏联的莫斯科,他曾在莫斯科大学研究数学,此后一直致力于计算机语言和泛型库研究。
在 20 世纪 70 年代,Stepanov 开始考[详细] -
C++ STL是什么,有什么作用?
所属栏目:[语言] 日期:2023-06-07 热度:312
在已有 C++ 尤其是 C++ 模板的基础上,从本节开始,我们开始系统地学习 STL 标准模板库,首先来了解什么是 STL,以及学习 STL 有什么用?
STL,英文全称 standard template library,中文可译为标准模板库或者泛型[详细] -
C++ STL版本有什么?
所属栏目:[语言] 日期:2023-06-07 热度:1597
自 1998 年 ANSI/ISO C++ 标准正式定案,C++ STL 规范版本正式通过以后,由于其实开源的,各个 C++ 编译器厂商在此标准的基础上,实现了满足自己需求的 C++ STL 泛型库,主要包括 HP STL、SGI STL、STLport、PJ STL、[详细]
-
C++11 shared_ptr智能指针(超级具体)
所属栏目:[语言] 日期:2023-06-07 热度:5954
在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:
有些内存资源已经被释放,但指向它的指针并没有改变[详细] -
C++11 nullptr:用于初始化空指针
所属栏目:[语言] 日期:2023-06-07 热度:7152
实际开发中,避免产生“野指针”最有效的方法,就是在定义指针的同时完成初始化操作,即便该指针的指向尚未明确,也要将其初始化为空指针。
所谓“野指针”,又称“悬挂指针”,指的[详细] -
C++11引用限定符的使用方法
所属栏目:[语言] 日期:2023-06-07 热度:3485
在《C++右值引用》一节中,我们给您介绍了左值和右值。值得一提的是,左值和右值的区分也同样适用于类对象,本节中将左值的类对象称为左值对象,将右值的类对象称为右值对象。
默认情况下,对于类中用 public 修饰[详细] -
C++11中转移()函数:强制把左值转为右值
所属栏目:[语言] 日期:2023-06-07 热度:3315
通过学习 《C++11移动构造函数》一节我们知道,C++11 标准中借助右值引用可以为指定类添加移动构造函数,这样当使用该类的右值对象(可以理解为临时对象)初始化同类对象时,编译器会优先选择移动构造函数。
注意[详细] -
C++11右值引用(一文看懂)
所属栏目:[语言] 日期:2023-06-07 热度:4285
《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。
很多初学者都感觉右值引用晦涩难懂[详细] -
C++11 constexpr:检验是否为常量表达式(长篇神文)
所属栏目:[语言] 日期:2023-06-07 热度:4752
constexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义。
所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员[详细] -
C++11 for循环(基于范围的循环)说明
所属栏目:[语言] 日期:2023-06-07 热度:7866
C++ 11标准之前(C++ 98/03 标准),如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构:
for(表达式 1; 表达式 2; 表达式 3){
//循环体
}
例如,下面程序演示了用上述结构遍历数组和容器的具[详细] -
C++11非受限联合体(union)
所属栏目:[语言] 日期:2023-06-06 热度:6198
在 C/C++ 中,联合体(Union)是一种构造数据类型。在一个联合体内,我们可以定义多个不同类型的成员,这些成员将会共享同一块内存空间。老版本的 C++ 为了和C语言保持兼容,对联合体的数据成员的类型进行了很大程度[详细]
-
C++11朗玛达匿名函数的使用方法详解
所属栏目:[语言] 日期:2023-06-06 热度:6762
lambda 源自希腊字母表中第 11 位的 λ,在计算机科学领域,它则是被用来表示一种匿名函数。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为 lambda 函数或者 lambda 表达式。
继 Python、Java、C[详细] -
C++11使用列表初始化(统一了初始化方式)
所属栏目:[语言] 日期:2023-06-06 热度:2892
我们知道,在 C++98/03 中的对象初始化方法有很多种,请看下面的代码:
//初始化列表
int i_arr[3] = { 1, 2, 3 }; //普通数组
struct A
{
int x;
struct B
{
int i;
int j;[详细] -
C++11 tuple元组分解
所属栏目:[语言] 日期:2023-06-06 热度:798
C++11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。
tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使[详细] -
模板参数默认值是 C++11支持的函数模板
所属栏目:[语言] 日期:2023-06-06 热度:6613
在 C++98/03 标准中,类模板可以有默认的模板参数,如下:
template <typename T, typename U = int, U N = 0>
struct Foo
{
// ...
};
但是却不支持函数的默认模板参数:
template <typename T = int> [详细] -
C++11运用using定义别名(替代typedef)
所属栏目:[语言] 日期:2023-06-06 热度:9019
大家都知道,在 C++ 中可以通过 typedef 重定义一个类型:
typedef unsigned int uint_t;
被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载:
void[详细] -
C++返回值类型后置(追踪回调类型)
所属栏目:[语言] 日期:2023-06-06 热度:2815
在泛型编程中,可能需要通过参数的运算来得到返回值的类型。考虑下面这个场景:
template <typename R, typename T, typename U>
R add(T t, U u)
{
return t+u;
}
int a = 1; float b = 2.0;
auto c = a[详细] -
从 C++中获得类型的完整解释程序
所属栏目:[语言] 日期:2023-06-06 热度:8218
decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。不了解 auto 用法的读者请转到《C++ auto》。
decltype 是“declare type”的缩写,译为“声明类型[详细] -
C++ auto类型推导完善攻略
所属栏目:[语言] 日期:2023-06-06 热度:7130
在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、char 等;但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具[详细]
-
如何使用 C++ 11作为 C++ 11的标准
所属栏目:[语言] 日期:2023-06-06 热度:8439
Simula 语言被认为是第一个面向对象的编程语言。Stroustrup 也非常赞赏 Simula 语言的这种特性,但由于实例开发中 Simula 语言的执行效率太低,所以此后不久,Stroustrup 开始从事“带类的C”编程语言的开[详细]
-
Python pathlib模块使用方法详解
所属栏目:[语言] 日期:2023-06-05 热度:4288
pathlib 模块的操作对象是各种操作系统中使用的路径(例如指定文件位置的路径,包括绝对路径和相对路径)。这里简单介绍一下图 1 中包含的几个类的具体功能:
PurePath 类会将路径看做是一个普通的字符串,它可以实[详细] -
Python行内存模块用法:随机读取文档指定行
所属栏目:[语言] 日期:2023-06-05 热度:7861
除了可以借助 fileinput 模块实现读取文件外,Python 还提供了 linecache 模块。和前者不同,linecache 模块擅长读取指定文件中的指定行。换句话说,如果我们想读取某个文件中指定行包含的数据,就可以使用 linecach[详细]
-
Python文件输入模块:多个文件的单行阅读
所属栏目:[语言] 日期:2023-06-05 热度:9427
前面章节中,我们学会了使用 open() 和 read()(或者 readline()、readlines() )组合,来读取单个文件中的数据。但在某些场景中,可能需要读取多个文件的数据,这种情况下,再使用这个组合,显然就不合适了。
庆[详细] -
Python锁定模块:实现持久性存储 Python对象
所属栏目:[语言] 日期:2023-06-05 热度:6911
Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。
值得一提的是,pickle 是 pyt[详细] -
Python with as用法说明
所属栏目:[语言] 日期:2023-06-05 热度:4591
任何一门编程语言中,文件的输入输出、数据库的连接断开等,都是很常见的资源管理操作。但资源都是有限的,在写程序时,必须保证这些资源在使用过后得到释放,不然就容易造成资源泄露,轻者使得系统处理缓慢,严重时[详细]