
C++
文章平均质量分 80
本栏目主要涉及到C++98/C++11/C++14/C++17相关的东西。
大树青云
历史不会简单的重复,但历史会惊人的相似
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++20 小语法
对于严格的C++ 编译器来说,以前在这种情境下int无法向下转换为bool,需要手动强制转换,这个提案允许在static_assert和if constexpr中从整形转换为布尔类型。C++23 这一情况得到了改善。以下表格就可以表示所有内容。原创 2025-04-28 22:22:02 · 388 阅读 · 0 评论 -
auto(x) decay copy
元素和欲移除元素,若不相等,则用当前元素覆盖当前__result 迭代器的值,然后__result 向后移一位。std::remove() 最终调用的是remove_if(),因此关键就在这个算法里面。请注意该程序的输出,是否如你所想的一样。foo() 中调用bar(),希望传递一份param 的拷贝,则我们需要单独多声明一个临时变量。而auto{x} 和auto(x),就相当于这个copy() 函数,只不过它是内建到语言里面的而已。然而这种方式是非常反直觉的,一般来说这两种写法的效果应该是等价的。原创 2025-04-28 22:20:46 · 350 阅读 · 0 评论 -
std::print 和 std::println
std::print和是 C++23 新增的格式化输出函数,旨在替代传统的std::cout链式调用。它们基于实现,支持类型安全的格式化字符串,语法更简洁,性能更优15。直接输出到stdout(默认)或指定的流。自动在输出末尾添加换行符。支持与相同的格式化语法(如{}占位符)。原创 2025-04-28 22:02:20 · 1447 阅读 · 0 评论 -
if consteval
if consteval原创 2025-04-28 21:33:57 · 422 阅读 · 0 评论 -
&&右值引用函数 和 &左值引用函数
&&右值引用函数 和 &左值引用函数void sorted() &&;//右值引用 void sorted() &;//左值引用void sorted() const &;void sorted() const &&;原创 2025-03-17 19:52:37 · 253 阅读 · 0 评论 -
判断等于多个枚举值之一
);Red,Green,Blue,Yellowint main()elsereturn 0;原创 2025-03-13 18:51:25 · 361 阅读 · 0 评论 -
std::ranges::views::keys, values, elements std::ranges::keys_view, values_view, elements_view
std::ranges::views::keysstd::ranges::keys_viewstd::ranges::views::valuesstd::ranges::values_viewstd::ranges::views::elementsstd::ranges::elements_view原创 2025-03-11 22:09:23 · 762 阅读 · 0 评论 -
std::ranges::views::take, take_while,std::ranges::take_view,take_while_view
范围适配器闭包对象(Range Adaptor Closure Object),可通过管道操作符。,可以高效处理范围的前 N 个元素,是函数式编程风格的典型工具。根据谓词(Predicate)截取原范围中满足条件的元素,一旦遇到不满足条件的元素,立即停止遍历,后续元素不再检查。若范围在遍历过程中被修改,可能导致未定义行为。是C++20 引入的范围库中的组件,用于。若原范围元素少于 N 个,则取整个范围。若所有元素都满足条件,则包含整个范围。一个范围适配器,生成原范围的。不保留后续满足条件的元素。原创 2025-03-10 22:09:31 · 580 阅读 · 0 评论 -
std::ranges::to
std::ranges::to原创 2025-02-27 10:42:09 · 257 阅读 · 0 评论 -
std::ranges::views::join,std::ranges::views::join_with
std::ranges::views::joinstd::ranges::views::join_with原创 2025-02-27 10:07:08 · 665 阅读 · 0 评论 -
std::ranges::views::filter
C++20 引入的视图适配器,用于根据谓词条件惰性过滤范围内的元素。通过捕获变量,可动态调整过滤条件对象为自定义结构体或类。:支持 Lambda、函数对象或成员函数。:迭代器类别继承自原始范围,可能影响性能。:惰性求值,不存储结果,适用于流式处理。视图可反向遍历(需注意效率)。:立即执行并将结果保存到容器中。生成仅包含满足条件元素的视图。:仅在遍历时计算,节省内存。链式组合多个视图适配器。:可与其他视图适配器(如。若原始范围支持双向迭代,原创 2025-02-27 09:16:01 · 750 阅读 · 0 评论 -
std::ranges::ref_view,std::ranges::owning_view, std::ranges::views::all
std::ranges::ref_viewstd::ranges::owning_view std::ranges::views::all原创 2025-02-26 22:09:45 · 998 阅读 · 0 评论 -
std::ranges::copy, copy_if, copy_n, copy_backward, replace_copy, replace_copy_if, reverse_copy
std::ranges::copystd::ranges::copy_ifstd::ranges::copy_nstd::ranges::copy_backwardstd::ranges::replace_copystd::ranges::replace_copy_ifstd::ranges::reverse_copystd::ranges::rotate_copystd::ranges::unique_copy原创 2025-02-21 19:48:40 · 819 阅读 · 0 评论 -
std::ranges::remove, std::ranges::remove_if, std::ranges::remove_copy, std::ranges::remove_copy_if
std::ranges::removestd::ranges::remove_ifstd::ranges::remove_copystd::ranges::remove_copy_if原创 2025-02-19 11:22:46 · 1093 阅读 · 0 评论 -
container::begin() end() rbegin() rend()
【代码】container::begin() end() rbegin() rend()原创 2025-02-19 10:21:18 · 156 阅读 · 0 评论 -
container::erase
std::map::erasestd::set::erasestd::multimap::erasestd::multiset::erasestd::unordered_map::erasestd::unordered_set::erasestd::unordered_multimap::erasestd::unordered_multiset::erasestd::string::erase C++23vector::erase deque::eraselist::erase原创 2025-02-17 22:04:09 · 281 阅读 · 0 评论 -
std::ranges::contains
contains原创 2025-02-17 21:43:12 · 657 阅读 · 0 评论 -
std::ranges::merge std::merge std::inplace_merge
std::ranges::mergestd::mergestd::mapstd::setstd::multimapstd::multisetstd::unordered_mapstd::unordered_setstd::unordered_multimapstd::unordered_multiset原创 2025-02-17 21:33:27 · 825 阅读 · 0 评论 -
ranges::find find_if find_if_not find_first_of find_last find_last_if find_last_if_not find_end adja
std::ranges::std::find std::ranges::find_ifstd::ranges::find_if_notstd::ranges::find_first_ofstd::ranges::find_laststd::ranges::find_last_ifstd::ranges::find_last_if_notstd::ranges::find_endstd::ranges::adjacent_find原创 2025-02-17 11:30:08 · 909 阅读 · 0 评论 -
std::ranges::includes search search_n binary_search mismatch lower_bound upper_bound equal_range
std::ranges::includes std::ranges::search std::ranges::search_n std::ranges::binary_search std::ranges::mismatch std::ranges::lower_bound std::ranges::upper_bound std::ranges::equal_range原创 2025-01-21 18:10:34 · 819 阅读 · 0 评论 -
ranges::set_intersection set_union set_difference set_symmetric_difference
ranges::set_intersection ranges::set_union ranges::set_difference ranges::set_symmetric_difference原创 2025-02-16 09:51:59 · 723 阅读 · 0 评论 -
set_intersection set_union set_difference set_symmetric_difference
std::set_intersection std::set_union std::set_difference std::set_symmetric_difference原创 2025-02-15 16:57:45 · 1044 阅读 · 0 评论 -
std::find, find_if, find_if_not,find_end,find_first_of,adjacent_find
std::findstd::find_ifstd::find_if_notstd::find_endstd::find_first_ofstd::adjacent_find原创 2025-02-15 16:02:01 · 1037 阅读 · 0 评论 -
std::includes search search_n binary_search mismatch lower_bound upper_bound equal_range
std::includes std::search std::search_n binary_search std::mismatch std::lower_bound std::upper_bound std::equal_range原创 2025-02-15 14:40:12 · 667 阅读 · 0 评论 -
头文件中#pragma once 和 #ifdef 区别
ifndef 是 C 语言相关的,通过宏定义避免文件多次编译。这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被同时包含,只认识宏,不管是不是相同的代码或者这是哪个文件。#pragma once 是编译器相关,移植型差,有些编译器支持,有些编译器不支持,比如:gcc,vs 编译器支持,bcc 编译器不支持。使用 #ifndef,编译器每次看到 #include 这个文件都需要读入文件,解析代码,效率低而使用 #pragma once 编译器根本不会重复打开文件,大大提高效率。原创 2025-02-12 10:00:27 · 1059 阅读 · 0 评论 -
C++11异常处理 noexcept
转自https://blog.youkuaiyun.com/zkreats/article/details/505507861.简介在C语言中,如果程序的运行出现异常、错误,我们想提供方案处理这些异常时,我们面临许多问题,如:(1)C语言没有提供统一(标准)的方式来处理错误;(2)无法保证错误会被正确的处理;(3)错误的传播无法控制,特别是在函数的嵌套调用时;… …当程序在运行时发...原创 2019-04-15 16:41:07 · 482 阅读 · 0 评论 -
std::back_inserter 和 std::inserter
std::back_inserter` 和 `std::inserter` 都是 C++ 标准库中的插入迭代器,用于向容器中插入元素。它们的主要区别在于插入元素的位置和适用的容器类型。`std::back_inserter` 创建一个插入迭代器,该迭代器将新元素插入到容器的末尾。它适用于支持 `push_back` 成员函数的容器,如 `std::vector`、`std::deque` 和 `std::list`。示例代码```cpp。原创 2024-12-13 15:19:45 · 737 阅读 · 0 评论 -
GitHub比较好的
https://github.com/Cpp-Clubhttps://github.com/0voice/cpp_new_features https://github.com/downdemo/Cpp-Templates-2ed原创 2024-11-26 22:45:13 · 228 阅读 · 0 评论 -
详解XOR(异或)运算加密
首先经过你脑海的是,这两家国家队可能实力相当,用概率学的说法,即两支球队夺冠的概率都是50%,那么结果就像是掷硬币,正反靠天时地利人和,并无从考证——我们设定这种情景为A。如果你是在A+情境下,这个夺冠信息对你来说多少有点失去新鲜,因为世界级的赛事,出差错的可能性不高,所以你会觉得你其实已经大概知道了结果,听或不听没有太大意义。好的,举了这么一个例子,你应该已经开始恍然了,信息会改变你对事物的未知度和好奇心,信息量越大,你对事物越了解,进而你对事物的好奇心也会降低,因为你对事物的确定性越高。原创 2024-11-26 22:34:54 · 1852 阅读 · 0 评论 -
Text、Data、BSS、Heap、Stack
RAM: 随机存取存储器(random access memory)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序ROM: 只读存储器(Read-Only Memory),是一种只能读出事先所存数据的固态半导体存储器。原创 2024-11-26 22:30:12 · 1524 阅读 · 0 评论 -
std::enable_if
这个模板类的实现相当的简单,看一下一个版本的实现。从上面源码可以看到,只有第一个模板参数为true时,struct 才会定义一个public的type类型(struct成员默认是public类型),type即为第二个模板参数。在 condition 为真的时候,由于偏特化机制,第二个结构体模板明显是一个更好的匹配,所以 std::enable_if::type 就是有效的。原创 2024-11-12 22:40:38 · 1128 阅读 · 0 评论 -
C++内联函数与静态函数
在func1中的调用点①,编译器会江山市nga面的foo函数的汇编代码内联到func1中的,而在②处,引用了foo的地址。GCC中static inline定义比较容易理解:可以将其看做是在static函数前面加上了inline属性.这个函数的大部分属性和static函数一样,只不过在调用这个函数的时候,gcc会在其调用处将其汇编代码展开编译而不为这个函数生成独立的汇编代码。static inline函数和static函数一样,其定义的范围是local的,即可以在同一个程序的不同的文件中由同名的函数定义。转载 2024-11-01 20:21:44 · 178 阅读 · 0 评论 -
inline函数
因为此时在A.cpp文件中看不到 f(T t) 的定义,所以无法实例化,所以编译过程同上边是一样的,最后 A.obj 目标文件中调用语句被编译为外部链接调用指令,将插入实际实例化的二进制代码的地址的工作,不过编译器在编译包含模板模板 f(T t)的定义的源文件 B.cpp 时,由于只是定义,而没有发生调用,所以将不会实例化f(T t), B.obj 目标文件中也就得不到 f() 函数的二进制代码!在编译的过程中,如果A.cpp文件中有函数 f() 的调用,但是不存在 f() 函数的定义;转载 2024-11-01 20:17:53 · 115 阅读 · 0 评论 -
std::string += + append性能比较
这是因为"+“在每次拼接后会创建一个新对象,然后将拼接后的字符串赋值给新对象,频繁的创建对象与拷贝消耗了大量时间。可以看到,str1的操作 += 和str3的操作 append 只有在字符串扩容时才会重新分配内存新建对象,但是使用"+"拼接的字符串str2每次拼接后都会构造一个新的string对象用于存储拼接结果。在字符串不长的情况下,三者差距不会特别大,但是字符串数据量越大"+“拼接需所要的时间就越长(拷贝需要的时间更长),”+="和"append"效率就会高出很多。原创 2024-10-31 22:19:18 · 359 阅读 · 0 评论 -
内存问题的排查工具和方法– Clang的AddressSanitizer
Valgrind可以有效地监测处大多数内存问题,你肯定忍不住会想,既然c/c++的内存问题这么常见,为什么不在编译器中加入内存问题检测的功能呢?很可惜,GCC中还目前还不支持内存检测,可喜的是,clang支持。这里我们看看如何用clang发现内存问题。转载 2024-10-31 21:48:51 · 193 阅读 · 0 评论 -
C++集合运算函数总结-
merge:将两个有序范围合并到一个新的有序范围中。set_union:将两个有序集合的并集存储到第三个集合中。set_difference:将第一个有序集合中不在第二个有序集合中的元素存储到第三个集合中。set_symmetric_difference:将两个有序集合的对称差(即在其中一个集合中但不在另一个集合中的元素)存储到第三个集合中。set_intersection:将两个有序集合的交集存储到第三个集合中。原创 2024-10-31 21:36:43 · 578 阅读 · 0 评论 -
函数返回数组引用
/函数fun传入的参数s是数组的引用,返回值s也是数组的引用。原创 2024-10-31 21:20:43 · 234 阅读 · 0 评论 -
使用std::function作为函数入参
C++11标准库里引入了std::function模板类,这个模板概括了函数指针的概念函数指针只能指向一个函数,而std::function对象可以代表任何可以调用的对象,比如说任何可以被当作函数一样调用的对象。当你创建一个函数指针的时候,你必须定义这个函数签名(表征这个函数的入参,返回值等信息);同样的,当你创建一个std::function对象的时候,你也必须指定它所代表的可调用对象的函数签名。这一点可以通过std::function的模板参数来实现。转载 2024-10-31 21:13:01 · 481 阅读 · 0 评论 -
c++ 派生类向基类转换的可访问性
1.如果派生类以public继承基类,则是is a关系,用派生类可以完成基类的所有功能,所以可以在任意地方将派生类自动转换成基类,注意,这里都是指指针或引用,而不是对象。3.如果D继承B的方式是public或者protected,则D的派生类的成员或者友员可以使用D向B的类型转换;反之,如果D继承B的方式是private,则不能使用。不论D以什么方式继承B,D的成员函数和友员函数都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员函数和友员函数来说永远是可访问的。原创 2024-04-23 13:27:12 · 1048 阅读 · 0 评论 -
std::vector
主要介绍std::vector相关的知识点原创 2023-12-14 20:54:47 · 2552 阅读 · 0 评论