
C / C++
山上一缕烟
这个作者很懒,什么都没留下…
展开
-
【C / C++】C++20 新特性:Designated Initializer
LNK2019原创 2022-08-08 17:51:58 · 1657 阅读 · 0 评论 -
【C / C++】包含多个工程(项目)的解决方案中,正确将标识符定义后,仍出现关于该标识符的 LNK2019 链接错误的一种情况
LNK2019原创 2022-07-05 14:42:08 · 583 阅读 · 0 评论 -
【C / C++】结构体数组与链表的存储方式演示(内存对齐示例)
#include <algorithm>#include <forward_list>#include <iostream>#include <string>using namespace std;using stunum_t = uint32_t;using age_t = uint16_t;const size_t NUM_OF_ENTRIES = 10;struct personal_information { stunum_t原创 2021-06-21 20:53:19 · 721 阅读 · 2 评论 -
【C / C++】螺旋填充一个矩阵:从左上角出发,顺时针行进,由外圈向内圈,用指定的序列螺旋填充矩阵。
#include <iostream>#include <vector>using namespace std;using chr_t = char;using coord_t = size_t;struct coord { coord_t x, y; };const chr_t content[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" };const chr_t delim[] = " ";const size_t CONTENT原创 2021-06-21 20:49:23 · 642 阅读 · 0 评论 -
【C / C++】可变参数个数函数的注意事项
#include <stdarg.h>void f(int _Count, ...) { va_list args; va_start(args, _Count); //... va_arg(args, int); //... va_end(args);}int main() { //...}可变数量参数部分必须列写在函数参数的最后,用三个点 “…” 表示。使用 va_list 声明一个可变参数列表。当开始依次读取可变参数时,使用 va_start。第一个参数为原创 2021-04-27 23:48:06 · 613 阅读 · 0 评论 -
【Visual Studio】更改编译使用的 C / C++ 版本 / 输出纯 C 代码
第 1 步:打开项目属性第 2 步:在 “配置属性” → “通用” 中,更改 C / C++ 语言的版本如果要输出纯 C 代码,在 “C / C++” → “高级” 中,设置 “编译为 C 代码”如果没有 “C / C++” 一项,请先在项目中新建一个 .c 或 .cpp 文件。...原创 2021-04-18 10:39:51 · 5889 阅读 · 0 评论 -
【C 语言】在 stdout 绘制简单的函数图像
问题用户输入字符串 str,格式为???????? + ????/????,其中????, ????分别是对勾函数的系数,取值范围是 1 到 16 之间的整数,需要设计程序实现以下功能:1、绘制 str 代表的对勾函数曲线。2、曲线的采样点用“*”表示。注意事项:1、输出的曲线要尽量完整、美观。2、用户输入均为合法输入。3、用户输入第二个字符串 str2,表示直线且格式为???????? + ????。同时输出 str 和 str2 表示的两条曲线(选做)。解scanf 的用法纯 C原创 2021-04-18 10:29:16 · 369 阅读 · 0 评论 -
【C++】出现 LNK2019 错误的一种情况及其解决办法
在自定义类的头文件中使用了模板。在模板实例化时,编译器无法找到模板的实现。【法一】在使用了模板类或模板函数的文件中 #include 与放入了类定义的 .h 文件同名的 .cpp 文件(即实现了类中的各个函数的文件)。【法二】(推荐)在定义了该类的 .h 头文件的末尾 #include 同名 .cpp 文件。...原创 2021-02-22 11:14:56 · 2334 阅读 · 0 评论 -
【VS / C++】#pragma warning(disable:4996) 无法消除 C4996 std::copy::_Unchecked_iterators::_Deprecate 的解决方法
Severity Code Description Project File Line Suppression StateError C4996 'std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To原创 2020-12-20 11:29:45 · 999 阅读 · 1 评论 -
Visual Studio 中,添加相应的头文件以后仍然提示相关的类等未定义的解决办法
把#include "pch.h"尽量向前移动,尽可能不要放在其它引用的头文件的后面。原创 2020-11-10 12:12:22 · 1545 阅读 · 0 评论 -
【说人话的算法小课堂】归并排序的正确性证明及时间复杂度分析(2020/9/25修订)
template<class _Ty> void merge(_Ty* _begin, _Ty* _mid, _Ty* _end) { const auto l = _end - _begin + 1; _Ty* t = new _Ty[l], * i = _begin, * j = _mid + 1, * k = t; while (i <= _mid && j <= _end) { if (*i <= *j) { *k = *i; ++i; ++k原创 2020-09-14 00:04:16 · 1099 阅读 · 0 评论 -
【说人话的算法小课堂】快速排序的正确性证明及时间复杂度分析
快排代码:template<class _Ty> _Ty* partition(_Ty* _begin, _Ty* _end) { _Ty* i = _begin, * j = _end, t = *_begin; while (i != j) { while (j > i && *j >= t)--j; *i = *j; while (i < j && *i <= t)++i; *j = *i; } *i = t原创 2020-09-14 00:00:17 · 1636 阅读 · 0 评论 -
【数据结构】【C++】线性栈和链栈
template<class _Ty, size_t _n> class line_stack {private: _Ty* a, * _top;public: //构造函数 line_stack() { a = new _Ty[_n]; _top = a - 1; } //判空 bool empty() const { return _top == a - 1; } //入栈 void push(_Ty&& _value) { ++_top; *_top =原创 2020-06-06 08:51:17 · 187 阅读 · 0 评论 -
【C++】map::erase 与 vector::erase 的返回值
#include<iostream>#include<map>#include<vector>#include<algorithm>#include<random>#include<chrono>using namespace std;unsigned a[] = { 11,12,13,14,15,16,17,18,19,20 };map<unsigned, unsigned> m; vector<un原创 2020-05-18 11:15:21 · 3470 阅读 · 0 评论 -
ACM-ICPC 读写挂(血妈快读与血妈快写)
一、血妈快读readi和readu分别读取有符号和无符号整数。需要头文件 cctype 。template<class _Ty> inline void readi(_Ty& x) { static _Ty c, s; x = 0, s = 1; c = getchar(); if (c == '-')s = -1; else x = x * 10 + c - '...原创 2020-05-02 15:49:43 · 415 阅读 · 0 评论 -
【C / C++】public、protected、private 及 friend 修饰
一、修饰类或结构体的成员变量和成员函数。(仅考虑公有继承)public、protected、private 及 friend 修饰都是用于修饰类内的成员函数及成员变量的。无论被哪个词修饰,基类(父类)的定义中都可以访问该成员变量或成员函数。1、被 public 修饰的成员函数和成员变量,可以通过基类的实例、继承类的类定义及实例访问。2、被 protected 修饰的成员函数和成员变量,只...原创 2020-04-09 16:13:28 · 992 阅读 · 0 评论 -
【小测试】当需要构造并输出一个很长的字符串的时候,考虑先存到内存然后用 puts 输出而不是反复调用 putchar
题目背景:Codeforces 1328B. K-th Beautiful String(题解)本题按要求输出第 k 小字典序的字符串,字符串含有 n - 2 个 a 和 2 个 b,长为 n。调用 n 次 putchar 的输出耗时远远长于先存到内存再直接 puts 输出。附上测试代码与本机测试结果。#include<cstdio>#include<chrono>...原创 2020-03-29 18:01:49 · 284 阅读 · 0 评论 -
【C / C++】new 与 delete 的一些注意事项
一、用 new 创建一个新的 int 型变量。int* a = new int;int* a = new(int);int* a = new int();int* a = new(int)();只有后两个语句生成的新变量才会被初始化。二、用 new 创建一个新的 int 数组,长度为 5 。int* b = new int[5];int* b = new int[5]();...原创 2020-02-06 17:11:41 · 212 阅读 · 0 评论 -
C\C++ 获取当前路径
获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。函数说明:函数原型:char* getcwd(char* buffer, int len);参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。返回值:获取成功则返回当前工作目录(绝对路径),失败则返...转载 2020-01-24 22:31:36 · 1101 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include <iostream>using namespace std;class CExample {private: ...转载 2020-01-01 11:31:34 · 153 阅读 · 0 评论 -
【C / C++】对左值、右值、左值引用和右值引用的几点小结
代码示例:#include <iostream>#include <vector>#include <algorithm>using namespace std;class Foo {public: Foo sorted() && ; Foo sorted() const &; Foo sorted...原创 2019-12-03 14:37:28 · 316 阅读 · 0 评论 -
【C / C++】15.2 — R-value references
传送门:https://www.learncpp.com/cpp-tutorial/15-2-rvalue-references/转载 2019-12-02 20:55:00 · 179 阅读 · 0 评论 -
【C / C++】const int *,int * const,int const *,int const * const 的区分技巧
一句话总结:就近原则、优先向左const靠近的数据类型或指针符号是常量。如果const的两侧都有类型名或指针,优先修饰左侧的类型名或指针。int * —— int 类型的指针int const * —— const 修饰指针指向的 int 为常量int * const —— const 修饰指针为常量int const * const —— 指针指向的 int 和指针均为常量con...原创 2019-11-23 12:10:33 · 578 阅读 · 0 评论 -
【(2019/11/18更新第二部分)简单(娱乐向?)测试】cstdlib 中的 rand() 和 C++11 起新增的 random 头文件,哪个生成随机整数更快?
今天在折腾Miller Rabin算法和Pollard Rho算法,中间过程要求随机数。于是来验证一下哪种方法更快生成随机数。反正就是编一个随机整数生成的函数,每调用一次生成一个,参数分别是下界和上界。生成1e7个unsigned long long类型的随机数,并存入变量a。二话不说,上代码。#include<cstdio>#include<cstdlib>#i...原创 2019-11-10 23:37:26 · 221 阅读 · 0 评论 -
【C / C++ · 怪事】代码的执行顺序变了?
#include<cstdio>#include<cstdlib>#include<iostream>int main(){ std::ios::sync_with_stdio(false);std::cin.tie(0); std::cout<<RAND_MAX; getchar(); return 0;}...原创 2019-11-10 21:20:48 · 449 阅读 · 0 评论 -
【C++ Primer 习题集】(第5版)练习16.4:编写行为类似标准库find算法的模板。函数需要两个模板类型参数,一个表示函数的迭代器参数,另一个表示值的类型。使用你的函数在一个vector
【C++ Primer 习题集】(第5版)P425 练习16.4:编写行为类似标准库find算法的模板。函数需要两个模板类型参数,一个表示函数的迭代器参数,另一个表示值的类型。使用你的函数在一个vector和一个list中查找给定值。本题是单纯的语法题,虽然代码较多,但也不会写非常详细的注释。#include<cstdio>#include<algorithm>#i...原创 2019-11-02 16:47:10 · 399 阅读 · 0 评论 -
【C++ Primer】(第5版) 练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替。
C++ Primer 第5版 P86 练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替。#include<iostream>#include<string>#include<random>#include<chrono>using std::string; using std::cin; using std::cou...原创 2019-11-02 13:25:19 · 510 阅读 · 0 评论 -
C++ 和 Python 中,当 % 运算符涉及负数时的运算结果对比
C++代码:#include<cstdio>int main() { for (int i = -10; i < 11; ++i)printf("%d %% 3 = %d\n", i, i % 3); putchar('\n'); for (int i = -10; i < 11; ++i)printf("%d %% -3 = %d\n", i, i % -3);...原创 2019-10-13 13:47:10 · 967 阅读 · 0 评论 -
【C++ Primer 习题集】(第5版)练习12.19:定义你自己版本的StrBlobPtr,更新StrBlob类,加入恰当的friend声明及begin和end成员。
【C++ Primer 习题集】(第5版)练习12.19:定义你自己版本的StrBlobPtr,更新StrBlob类,加入恰当的friend声明及begin和end成员。StrBlob是一个用于存储字符串类的变长容器,在访问、尾部添加、尾部删除时带有下标越界检查。StrBlob与自定义的指针类StrBlobPtr配合使用,来完成常见的容器操作。参考代码:#include<algori...原创 2019-10-13 09:16:10 · 382 阅读 · 0 评论 -
提示:std::uniform_int_distribution<typename> u(a, b); 中,务必保证a≤b,否则生成的随机整数均匀分布的范围会突破此限制。
std::uniform_int_distribution<typename> u(a, b);中,务必保证a≤b,否则生成的随机整数均匀分布的范围会突破此限制。原创 2019-09-25 23:31:04 · 669 阅读 · 0 评论 -
提示:Visual Studio中,如果项目名称或路径名太长,可能会无法创建调试需要的文件,导致无法单步调试。此时需要把项目名缩短或将项目存放在一个路径名较短的位置。
提示:Visual Studio中,如果项目名称或路径名太长,可能会无法创建调试需要的文件,导致无法单步调试。此时需要把项目名缩短或将项目存放在一个路径名较短的位置。...原创 2019-09-23 20:48:51 · 1710 阅读 · 0 评论 -
【C++ Primer 习题集】(第5版):练习12.2:编写你自己的StrBlob类,包含const版本的front和back。【智能指针的简单使用】
【C++ Primer 习题集】(第5版)练习12.2(P298):编写你自己的StrBlob类,包含const版本的front和back。#include<cstdio>#include<algorithm>#include<string>#include<vector>#include<ctime>#include<...原创 2019-09-20 12:33:25 · 502 阅读 · 0 评论 -
【2019/10/6更新】【常数优化】使用 register 修饰符来加快运行速率
register 修饰如果可能,将变量放入寄存器。放入寄存器的变量在进行操作时的速度会大大提升,但不能再通过&符号取地址。不是所有类型的变量都可以放入寄存器。另外,放入寄存器后,寄存器的这部分空间不能再被其它内容使用;而且,如果将不是频繁使用的变量放入寄存器,运行时间不会有明显的缩短。因此,不适当地将变量放入寄存器,反而有可能降低运行速度。演示平台:Core-i5 8400 + 2...原创 2019-09-16 13:32:29 · 519 阅读 · 0 评论 -
玄学1:随便试了一下循环里的变量数组与多个变量++的执行速度对比,VS下数组居然慢这么多……
如题测试平台:GX8-CR5S1(N970TD)CPU:Core-i5 8400内存:24 GB(DDR4 2666 双通道)代码1:#include<cstdio>#include<chrono>#include<string>#include<array>#include<algorithm>#include<...原创 2019-09-16 13:08:31 · 263 阅读 · 0 评论 -
【2019/8/22更新】关于 C / C++ 中部分语句跳过不执行的常见原因汇总
1、中间变量溢出,影响到后续语句的执行。2、数组下标越界,写入了数组之后的内存地址,导致部分奇异的破坏。3、自定义函数跳过不执行,可能与函数名和内置的函数名重合且参数类型相同导致编译器无法判断重载哪个函数有关。对于以上情况,大多数时候由于语句合法(无语法错误),IDE 都不会给出错误提示。所以对于这些问题引起的部分语句直接跳过,只能通过打印中间变量和单步执行来判定问题所在。...原创 2019-08-20 17:31:18 · 7686 阅读 · 0 评论 -
【2019/9/14更新】似乎 C / C++ 在进行低于 32 位整数参与的运算时会将全部低于 32 位的整数转换成 32 位的 int / unsigned
如题,案例见博文:https://blog.youkuaiyun.com/COFACTOR/article/details/99693651该题 AC 代码:一开始我提交时将全部变量的类型都指定为 unsigned char ,提交以后的运行时间约为 170 ms 。但是如果将全部 unsigned char 都替换成 unsigned int ,时间减少到 150 ms 。事实上对于 8 位、16 ...原创 2019-08-17 16:58:18 · 179 阅读 · 0 评论