
C++98/03
丸子叮咚响
日拱一卒,功不唐捐。
展开
-
C++ 返回类型为bool的函数未返回导致的问题
问题:写一个类方法A,返回类型为bool,但在函数体中忘记返回。利用NDK构建C++库提供给Android后,上层方法A总是崩溃。通过排查日志,崩溃时调用了不该调用的另一个类方法B,不得其解。阅读代码,意外发现类方法B的定义就紧接着类方法A的定义,然后发现了类方法A没有写return。反过来看,其实在编译过程中已经有相关的警告,如下。所以不要只关注错误,还要关注这些“不重要”的警告,它会在你不察觉的地方埋雷。…xxxx.cc:959:1: warning: control reaches end.原创 2021-11-19 19:38:41 · 3360 阅读 · 5 评论 -
C++ 拷贝操作
目录一 strcpy二 strncpy三 memcpy四 std::copy std::copy_if std::copy_n std::copy_backward五 参考一 strcpy头文件< cstring >语法char* strcpy( char* dest, const char* src );解释拷贝src到dest中,包括结束空字符如果dest不够大或者两个字符串的范围有重叠,其行为未定义返回值为destdemo // strc原创 2021-06-11 19:58:18 · 2323 阅读 · 0 评论 -
std::vector 元素位置变化时的处理
简述当 push_back、insert、reserve、resize 等函数导致内存重分配时,或当 insert、erase 导致元素位置移动时,vector 会试图把元素“移动”到新的内存区域。vector 通常保证强异常安全性,如果元素类型没有提供一个保证不抛异常的移动构造函数,vector 通常会使用拷贝构造函数。demo//// main.cpp//// Created by wz on 2020/12/27.//#include <iostream>#in原创 2020-12-27 23:55:21 · 1078 阅读 · 0 评论 -
C++ SFINAE
SFINAE : Substitution Failure Is Not An Error (替换失败不是错误)。知乎 - C++模板进阶指南:SFINAE 推荐阅读。SFINAE最主要的作用,是保证编译器在泛型函数、偏特化、及一般重载函数中遴选函数原型的候选列表时不被打断。除此之外,它还有一个很重要的元编程作用就是实现部分的编译期自省和反射。cppreference - SFINAE在函数模板的重载决议中应用此规则:当将模板形参替换为显式指定的类型或推导的类型失败时,从重载集中丢弃这个.原创 2020-10-16 17:51:23 · 414 阅读 · 0 评论 -
C++ 标准库 数值算法
目录一 概述二 辅助函数三 std::accumulate四 std::inner_product五 std::adjacent_difference六 std::partial_sum七 github八 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >,少量定义于< numeric >。本文主要探究以下用于 数值区间 的算法,它们定义于< numeric >:std::accumulate 对一个范围内的元素求和std::原创 2020-08-18 20:35:07 · 1668 阅读 · 0 评论 -
C++ 标准库 已排序区间算法
目录一 概述二 辅助函数三 std::binary_search四 std::includes五 std::lower_bound六 std::upper_bound七 std::equal_range八 std::merge九 std::set_union十 std::set_intersection十一 std::set_difference十二 std::set_symmetric_difference十三 std::inplace_merge十四 std::partition_point十五 git原创 2020-08-18 09:27:41 · 396 阅读 · 0 评论 -
Windows 清除DNS缓存C++实现
一 代码#include <stdio.h>#include <Windows.h>typedef BOOL (WINAPI *DnsFlushResolverCacheFuncPtr)();int main() { HMODULE dnsapi = LoadLibrary("dnsapi.dll"); if (dnsapi == NULL) { printf("Failed loading module: %d\n", GetLas转载 2020-07-28 17:48:39 · 871 阅读 · 0 评论 -
C++ 标准库 排序算法
目录一 概述二 辅助函数三 std::sort四 std::stable_sort五 std::partial_sort六 std::patial_sort_copy七 std::nth_element八 std::make_heap九 std::push_heap十 std::pop_heap十一 std::sort_heap十二 github十三 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间元素排序 的算法:std原创 2020-07-17 08:12:41 · 1576 阅读 · 0 评论 -
C++ 标准库 变序型算法
目录一 概述二 辅助函数三 std::reverse四 std::reverse_copy五 std::rotate六 std::rotate_copy七 std::next_permutation八 std::prev_permutation九 std::shuffle(C++11)十 std::random_shuffle十一 std::partition十二 std::stable_partition十三 std::partition_copy十四 github十五 参考一 概述C++ 标准库中原创 2020-06-30 14:16:33 · 251 阅读 · 0 评论 -
C++ 算法 移除区间元素
目录一 概述二 辅助函数三 std::remove四 std::remove_if五 std::remove_copy六 std::remove_copy_if七 std::unique八 std::unique_copy九 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 移除区间元素 的算法:std::remove 移除满足特定判别标准的元素std::remove_if 移除满足特定判别标准的元素std::remove_原创 2020-06-28 20:36:46 · 561 阅读 · 0 评论 -
C++ 算法 替换区间元素
目录一 概述二 辅助函数三 std::replace四 std::replace_if五 std::replace_copy六 std::replace_copy_if七 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 替换区间元素 的算法:std::replace 替换区间中特定值元素为另一个值std::replace_if 替换区间中满足特定判别标准的元素为另一个值std::replace_copy 复制一个范围内的元原创 2020-06-19 18:39:15 · 724 阅读 · 0 评论 -
C++11 算法 区间元素赋值
目录一 概述二 辅助函数三 定义四 Demo五 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间元素赋值 的算法:std::fill 将一个给定值复制赋值给一个范围内的每个元素std::fill_n 将一个给定值复制赋值给一个范围内的 n 个元素二 辅助函数本文中Demo用到的辅助函数请参考此前文章 C++ 算法 查找元素。三 定义std::filltemplate< class Forwa原创 2020-06-19 17:45:27 · 1672 阅读 · 0 评论 -
C++ 算法 交换区间元素
目录一 概述二 辅助函数三 定义四 Demo五 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 交换区间元素 的算法:std::swap_ranges 交换两个区间对应元素。二 辅助函数本文中Demo用到的辅助函数请参考此前文章 C++ 算法 查找元素。三 定义template< class ForwardIt1, class ForwardIt2 >ForwardIt2 swap_ranges原创 2020-06-19 17:21:46 · 433 阅读 · 0 评论 -
C++ 算法 归并元素
目录一 概述二 辅助函数三 定义四 Demo五 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 归并排序区间元素 的算法:std::merge 归并二个已排序范围 [first1, last1) 和 [first2, last2) 到另一个已排序范围中二 辅助函数本文中Demo用到的辅助函数请参考此前文章 C++ 算法 查找元素。三 定义template< class InputIt1, class I原创 2020-06-17 09:48:01 · 247 阅读 · 0 评论 -
C++ 算法 std::transform
目录一 定义二 Demo三 参考一 定义std::transform应用给定的函数到范围并存储结果于另一范围。定义于< algorithm >template< class InputIt, class OutputIt, class UnaryOperation >OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation原创 2020-06-17 09:35:57 · 532 阅读 · 0 评论 -
C++ 算法 复制元素
目录一 概述二 辅助函数三 定义四 Demo五 参考一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间元素复制 的算法:std::copy 将某一范围的元素复制到一个新的位置std::copy_if(C++11) 将某一范围的满足条件的元素复制到一个新的位置std::copy_n(C++11) 将一定数目的元素复制到一个新的位置std::copy_backyard 按从后往前的顺序复制一个范围内的元素二 辅助函数原创 2020-06-10 09:39:13 · 383 阅读 · 0 评论 -
C++ 算法 区间的比较
一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间比较 的算法:equal 检验相等性is_permutation(C++11) 测试不定序的相等性mismatch 查找第一处不同lexicographical_compare 字典次序比较二 辅助函数本文中Demo用到的辅助函数请参考此前文章 C++ 算法 查找元素三 std::equal定义std::equal 的定义式很多,也比较有代表性,挑出部原创 2020-05-20 08:38:31 · 848 阅读 · 0 评论 -
C++ 算法 查找元素
一 概述C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 查找元素 的算法:std::find 查找第一个匹配元素std::find_if 查找第一个匹配元素std::find_if_not(C++11) 查找第一个不匹配元素std::search_n 查找前n个连续匹配值std::search 查找第一个子区间std::find_end 查找最后一个子区间std::find_first_of 查找某些元素第一次出现位置st原创 2020-05-15 10:07:55 · 1584 阅读 · 0 评论 -
C++ 算法 元素最大值和最小值
一 写在前面本文介绍 C++ 标准库中的三个 用于获取元素最大值和最小值 的非更易型算法(nonmodifying algorithm): min_element、 max_element 和 min_max_element。同样均定义于头文件< algorithm >。二 Demo代码:#include <algorithm>#include <iostream>#include <iterator>#include <vecto原创 2020-05-13 20:29:45 · 2438 阅读 · 0 评论 -
C++ 整数极值及计算机表示方法
一 极值可以使用std::numeric_limits 获取各种算术类型的最大最小值,头文件<limits>定义于头文件 <limits>template< class T > class numeric_limits;numeric_limits 类模板提供查询各种算术类型属性的标准化方式。通过 numeric_limits 模板的特化提供此信息。标准库为所有算术类型制定可用的特化:template<> class numeric_l..原创 2020-05-11 20:44:54 · 644 阅读 · 0 评论 -
C++ iterator(5)reverse_iterator adaptor
写在前面迭代器适配器种类有很多,此次主要说明 reverse_iterator 。同时对 迭代器函数 rbegin 和 rend 进行说明。一 迭代器适配器迭代器适配器种类,例如:reverse_iteratormove_iterator(C++11)insert_iteratorfront_insert_iteratorback_insert_iteratoristre...原创 2020-04-28 20:53:48 · 278 阅读 · 0 评论 -
C++ 算法 元素计数
一 简介C++ 标准库算法主要定义于头文件 < algorithm >, 一些用于数值处理的算法定义于头文件< numeric > 。本文介绍 非更易型算法 中的用于 元素计数 的两种算法:std::cout 和std::count_if。二 std::count 和 std::count_if返回范围 [first, last) 中满足特定判别标准的元素数。template< class InputIt, class T >typename iter原创 2020-05-12 20:54:40 · 520 阅读 · 0 评论 -
C++ iterator(4) Tag & Traits
一 iterator tag头文件< iterator >iterator 有不同的分类(catelogy), 每个分类对应一个tag,如下:struct input_iterator_tag { };struct output_iterator_tag { };struct forward_iterator_tag : public input_iterator_tag...原创 2020-04-24 20:39:34 · 515 阅读 · 0 评论 -
C++ C-style 日期和时间
一 简介1. 类型(1) struct tm日历时间类型;被解开( broken down )的日历时间类型。struct tm{ int tm_sec; // seconds after the minute - [0, 60] including leap second int tm_min; // minutes after the hour...原创 2020-04-10 21:32:40 · 474 阅读 · 0 评论 -
C++ iterator(2) adaptor function
一 简介1.std::insertertemplate< class Container >std::insert_iterator<Container> inserter( Container& c, typename Container::iterator i ); (until C++20) template< class Contain...原创 2020-03-31 19:59:02 · 211 阅读 · 0 评论 -
C++ iterator(1) 几个辅助函数
一 简介头文件<iterator>1. std::advance增加迭代器it n个元素的步长template< class InputIt, class Distance >void advance( InputIt& it, Distance n );(until C++17)template< class InputIt, cla...原创 2020-03-17 19:21:23 · 525 阅读 · 0 评论 -
C++ std::stringstream
一 简介stringstream可以很方便的进行数字与字符串的转换。头文件<sstream>template< class CharT, class Traits = std::char_traits<CharT>> class basic_stringstream;(until C++11)template< ...原创 2020-03-12 19:53:34 · 3332 阅读 · 0 评论 -
C++ std::pair
一 简介定义于头文件<utility>template <class T1, class T2>struct pair;二 pair构造函数// 大致3类pair( const T1& x, const T2& y );template< class U1, class U2 >pair( U1&&...原创 2020-03-04 21:09:59 · 779 阅读 · 0 评论 -
C++ 成员模板(member template)
一 成员模板1. class 的成员可以是template。2. 但成员模板不能是virtual。3. 该语言特性往往被用来支持class template内的成员之间的自动类型转换。template <typename T>class A {public: template <typename U> void assign(const D&...原创 2020-03-02 20:43:52 · 2917 阅读 · 0 评论 -
C++ 插入迭代器
插入迭代器 std::inserter、std::front_inserter、std::back_inserter均定义于头文件<iterator>.一 申明std::inserter要求容器支持insert操作。c表示容器,i表示将插入位置的迭代器。template< class Container >std::insert_iterator<...原创 2020-01-13 20:13:20 · 527 阅读 · 0 评论 -
std::find std::execution
一 简介std::find 头文件<algorithm>template< class InputIt, class T >InputIt find( InputIt first, InputIt last, const T& value ); (1) (C++20 前)template< class InputIt, class T >...原创 2019-11-08 09:45:49 · 1276 阅读 · 0 评论 -
C++ std::ios::tie
一 作用获取、设置绑定流二 函数申明get(1) ostream* tie() const 返回指向绑定输出流的指针 set(2) ostream* tie(ostream* tiestr) 将对象绑定到输出流tiestr,并返回之前绑定流的指针(如果有的话);若之前未绑定,返回空指针 三 注意The tied stream is an output...原创 2019-01-04 08:18:32 · 1002 阅读 · 0 评论 -
C++ std::allocator简单使用
一 举例allocator : 分配未初始化的存储 ;deallocator:释放分配的存储;#include <memory>......std::allocator<int> a;int * p = a.allocate(20);......a.deallocate(p, 20);二 注意construct :在C++17中弃用,C++2...原创 2018-12-29 17:45:17 · 1039 阅读 · 0 评论 -
C++11 std::tuple
C++中有 std::pair,C++11增加了std::tuple,是对std::pair的泛化。一 简介1 头文件<tuple>2 声明template<class ... Types> class tuple;二 tuple定义及初始化的几种方式1 模板实例化这个对使用tuple来说是比较笨重的方法,不展开。2 使用std::make_...原创 2018-12-29 08:31:09 · 1056 阅读 · 0 评论 -
C++ std::pair
一 简介1 头文件为<utility>2 申明template <class T1, class T2> struct pair;二 pair定义及初始化的两种方式1 模板实例化std::pair<int, double> point1;point1.first = 1;point1.second = 2.2;2 使用std::...原创 2018-12-29 08:10:11 · 1436 阅读 · 0 评论 -
C++ RTTI
RTTI:Runtime Type Identification,运行时类型识别。C++通过以下的两个操作提供RTTI:(1)typeid运算符,该运算符返回其表达式或类型名的实际类型。(2)dynamic_cast运算符,安全而有效地进行向下转型(downcast)。一 typeid1 返回值typeid的返回为const type_info&.。type_info是s...原创 2018-12-04 09:23:53 · 420 阅读 · 0 评论 -
C++ 指针和const指针赋值
一 简单示例int a;const int c_a = 1;int* p;p = &a;p = &c_a; // error即非const指针不能指向const数据(数据为非指针类型)。int a;const int c_a = 1;const int* p1;p1 = &a;p1 = &c_a;即const指针既可以指向co...原创 2018-11-29 07:55:00 · 3737 阅读 · 0 评论 -
C++ 重载 重写 隐藏
一 重载条件:1、作用域相同2、函数名相同3、参数不同(个数不同、类型不同、顺序不同均可)举例:class demo{ void fun(int a); void fun(int a, int b); // 参数个数不同,重载 void fun(char *a); // 参数类型不同,重载 int fun(int a); // 仅返回值不...原创 2018-08-15 09:30:12 · 288 阅读 · 0 评论 -
C++ std::ios::sync_with_stdio
一 作用设置iostream与stdio流的同步(开、关)二 函数声明bool sync_with_stdio (bool sync = true);三 iosream与stdio流的对应关系C stream iostream stdin cin wcin stdout cout wcout stderr cerr wcerr...翻译 2019-01-04 22:09:08 · 3219 阅读 · 0 评论 -
C++ using
一 C++11前的使用1 using申明《c++ primer plus》中:using申明 : using + 限定名称限定名称:包含名称空间的名称举例:using std::cout;2 using编译指令举例:using namespace std;using 编译指令可以传递。二 C++11中的使用1 取代typedef举例:...原创 2019-01-24 20:22:47 · 17179 阅读 · 2 评论