共 27 篇文章
示例:
它实现了**双向链表**(Doubly Linked List)的数据结构
也是一种关联式容器,有没有multi的机制也跟set相同。
通常用法为 `std::pair<T1, T2>`,其中 `T1` 和 `T2` 表示两个不同的数据类型
是一种关联式容器,set不允许容器中有重复的元素,即使调用插入不会报错,但实际并不会被插入,但multiset允许存在重复的元素。
通过vector和deque容器,实现对于五个人的随机打分(**共十位评委**),在去掉一个最高分和一个最低分后,得出每个人最终的平均分,并打印输出
与传统的数组不同,vector 的大小可以**动态调整**,能够根据需要自动扩展或缩小
它保存了函数的地址,并允许**通过指针来调用函数**
>左值和右值都是表达式的属性,通常出现在表达式的左侧和右侧 > >左值:表示**对象的身份**,如变量、函数名 > >右值:表示**对象的值**,如代数运算表达式、匿名的lambda表达式(临时对象)
异常安全(Exception Safety): 指的是在发生异常时,程序或组件仍能维持良好状态,不会泄漏资源或处于不一致状态。RAII的广泛使用也有助于实现异常安全。当异常抛出时,栈展开会调用对象的析构函数,从而确保资源释放,保证程序不崩溃或资源不遗失。
对于不能随机访问的数据结构来说,sort算法是不能使用的,此时应使用该种容器自带的排序算法。
不可分割性:一个原子操作在执行时被视为一个整体,期间不会被其他操作打断。无论是成功还是失败,整个操作要么全部完成,要么全部不发生。
它允许你将**任何可调用对象**(如普通函数、lambda表达式、函数指针、成员函数指针等)存储在一个对象中。`std::function`可以接受多种类型的函数,并提供了**统一的调用接口**。
智能指针是封装了原始指针的类,提供了自动内存管理的机制,它们通过 **RAII**(Resource Acquisition Is Initialization,资源获取即初始化)原则,确保资源在不再需要时自动释放,从而避免手动管理内存的复杂性和错误
互斥锁是
相比传统的 `rand()`,这种方式具有:
例如:
constexpr 是“constant expression”(常量表达式)的缩写。它用于声明和定义可以在编译时求值的变量和函数。这意味着这些变量和函数的值在编译阶段就已确定,不需要在运行时计算,从而提高了程序的性能和效率。
在C++中,explicit关键字用于构造函数或者单参函数声明处,以防止编译器进行隐式类型转换。当我们在类的头文件中声明构造函数时,如果希望该构造函数不能被隐式调用(例如不能用ClassName c = value;这种隐式转换方式来构造对象),就需要在声明时加上explicit。
`std::forward` 和其他类似工具(如`std::move`)都在 **`<utility>`** 头文件中,使用时需要包含。
// 普通写法: int x = someFunction(); if (x > 0) { // ... }
`new int[10]` 会在堆上分配一个大小为 10 的整型数组,并返回一个指向数组第一个元素的指针。
如果函数声明为 `noexcept`,它表示函数内部不会抛出异常。
模板是 C++ 提供的**泛型**编程工具,用来**编写通用代码**,通过模板,你可以为不同的数据类型编写通用的算法或类,而无需重复代码
typedef std::function<void()> Function;