<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_42080098的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_42080098</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_42080098]]></copyright><item><title><![CDATA[动态数组的sizeof失效？无法使用memset(a, 0, sizoef(a)) ?]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/128371370</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/128371370</guid><author>qq_42080098</author><pubDate>Mon, 19 Dec 2022 13:42:10 +0800</pubDate><description><![CDATA[首先需要明白sizeof是在编译时由编译器进行推导大小，如果我们对Dynamic Array即动态数组使用sizeof，编译器在编译时对其推导，推出为指针大小（depends on pointer size）4 bytes / 8 bytes。]]></description><category></category></item><item><title><![CDATA[C++类型转换cast]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/126660254</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/126660254</guid><author>qq_42080098</author><pubDate>Fri, 02 Sep 2022 12:47:00 +0800</pubDate><description><![CDATA[**dynamic_cast用于转换继承指针/引用**
**static_cast用于普通类型转换**
**reinterpret_cast用于低级别的位转换，使用时小心，注意类型大小的差异**
**const_cast用于常数/volatile转换**]]></description><category></category></item><item><title><![CDATA[C++ gcc编译器加速优化]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/126256034</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/126256034</guid><author>qq_42080098</author><pubDate>Tue, 09 Aug 2022 21:24:58 +0800</pubDate><description><![CDATA[C++ gcc编译器加速优化。]]></description><category></category></item><item><title><![CDATA[memset函数初始化数组]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/125627839</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/125627839</guid><author>qq_42080098</author><pubDate>Tue, 05 Jul 2022 20:58:00 +0800</pubDate><description><![CDATA[memset函数的声明和含义如下：函数解释：将s所指向的某一块内存中的前n个字节的内容全部设置为 ch 指定的 ASCII值， 第一个值为指定的内存地址，块的大小由第三个参数指定，这个函数通常为新申请的内存做初始化工作， 其返回值为指向s的指针。该函数对int数组而言只能用于int数组的置0或-1，其他值无效。其作用是在一段内存块中填充某个给定的值，它是对较大的结构体或者数组进行清零操作的一种最快方法。函数声明如下：
因此如果我们想将数组置为我们要的十进制值，只能置为0或-1，因为0的二进制表示全为0，-1]]></description><category></category></item><item><title><![CDATA[cin加速]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/125307588</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/125307588</guid><author>qq_42080098</author><pubDate>Thu, 16 Jun 2022 00:10:28 +0800</pubDate><description><![CDATA[在c++中之所以cin，cout效率低，是因为先把要输出的东西存入缓冲区，再输出，导致效率降低，而这段语句可以来消除iostream的输入和输出缓存，可节省时间，使效率与scanf与printf相差无几，还有应注意的是scanf与printf使用的头文件应是stdio.h而不是 iostream，使用语句关闭这一操作时应注意cin和cout不要与scanf和printf混用以免出现问题。
在默认的情况下cin绑定的是cout，每次执行 .........]]></description><category></category></item><item><title><![CDATA[C++ watch变量指定进制]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/124393069</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/124393069</guid><author>qq_42080098</author><pubDate>Sun, 24 Apr 2022 22:02:49 +0800</pubDate><description><![CDATA[举个栗子，我们在debug时想看一个变量，以特定的进制输出
我们只需在watch变量名字后面加上", 进制缩写（bodh）"
二进制
variable,b
十六进制
variable,h


]]></description><category></category></item><item><title><![CDATA[C++多维vector为什么比多维数组慢]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/124357242</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/124357242</guid><author>qq_42080098</author><pubDate>Fri, 22 Apr 2022 23:29:42 +0800</pubDate><description><![CDATA[笔者最近在做LC时，发现用多维vector比用多维数组在运行时间和运行空间上都大了许多，举个栗子
double dp[101][25][25] ={0.0};
vector&lt;vector&lt;vector&lt;double&gt;&gt;&gt; dp_v(101, vector&lt;vector&lt;double&gt;&gt;(25, vector&lt;double&gt;(25, 0.0)));

两者运行时间相差百余ms
通过阅读资料调研发现
慢的原因是数据在内存上存储的方式不同（.]]></description><category></category></item><item><title><![CDATA[C++ vector中所有元素快速置零]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/124356341</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/124356341</guid><author>qq_42080098</author><pubDate>Fri, 22 Apr 2022 22:23:55 +0800</pubDate><description><![CDATA[vector元素置零方法有很多种，其中比较快的是std::fill
const int n = 10000;
vector&lt;int&gt; v(n, 0);
/*
modify vector
.
.
.
*/
//here we want to set all value in the vector to zero
std::fill(v.begin(), v.end(), 0);

当然还可以使用iterator迭代置零，或者assign置零
const int n = 10000;
vector&]]></description><category></category></item><item><title><![CDATA[C++右值引用(right value reference)实战运用]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/124220602</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/124220602</guid><author>qq_42080098</author><pubDate>Sat, 16 Apr 2022 21:39:38 +0800</pubDate><description><![CDATA[C++11之前，我们所说的引用只有左值引用（auto &amp;a），现在我们通常使用的引用也是左值引用，但是准确一点说，C++11之后，除了左值引用(LVaule)，还有右值引用(RValue)。
一句话概况LVaule和RValue
auto a = 10;
//其中 a就是左值， 10就是右值
auto b = a;
//其中 b是左值，a 是右值

C++11后，
L-value（左值）：指可寻址的，L表示location，
A value that has an address.
R-value ]]></description><category></category></item><item><title><![CDATA[C++ priority_queue使用Lambda表达式重写compartor]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/123833742</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/123833742</guid><author>qq_42080098</author><pubDate>Tue, 29 Mar 2022 22:17:48 +0800</pubDate><description><![CDATA[在之前的blog中介绍过STL库中set、map、priority_queue三种排序方式，那么相信读者会经常用到特殊的type，这时，我们需要重写compartor，举个栗子
以Pair中第二个元素构建大根堆
	auto cmp = [](const pair&lt;int, int&gt; &amp;a, const pair&lt;int, int&gt; &amp; b) {
		return a.second &lt; b.second;//less
	};
	priority_queue&lt;]]></description><category></category></item><item><title><![CDATA[visual studio比较文件差异（diff操作）]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/123782475</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/123782475</guid><author>qq_42080098</author><pubDate>Sun, 27 Mar 2022 21:53:10 +0800</pubDate><description><![CDATA[相信经常在linux上使用git diff的同学，在第一次使用visual studio比较两文件时比较困惑，vs有没有相同的功能？答案当然是有的！
一、依次点击菜单【视图】&gt;&gt;【其它窗口】&gt;&gt;【命令窗口】，如下图所示，启动命令窗口：

二、在terminal中使用Tools.DiffFiles

Tools.DiffFiles a.cpp b.cpp

输入a文件和b文件路径即可
Tips：
可以在terminal中输入不同的选项来调整文件差异
如：

Diff.SideBySid]]></description><category></category></item><item><title><![CDATA[STL set、map、priority_queue默认排序]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/121539379</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/121539379</guid><author>qq_42080098</author><pubDate>Thu, 25 Nov 2021 15:50:25 +0800</pubDate><description><![CDATA[set
set&lt;T&gt; s;//默认升序,相当于 set&lt;int,less&lt;T&gt;&gt;。
set&lt;T, less&lt;T&gt;&gt; s; //该容器是按升序方式排列元素。
set&lt;T, greater&lt;T&gt;&gt; s;  //该容器是按降序方式排列元素。

map
map&lt;T1, T2&gt; m;//默认按键的升序方式排列元素,相当于 map&lt;T1, T2, less&lt;T1&gt;&gt; m
map&lt;T1, T2, ]]></description><category></category></item><item><title><![CDATA[编写宏（macro）时遇到的小错误]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/118529827</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/118529827</guid><author>qq_42080098</author><pubDate>Tue, 06 Jul 2021 21:09:11 +0800</pubDate><description><![CDATA[例如笔者写了一个如下的copy宏
#define IOV_COPY (a, b)          \
    (a).base = (b).base; \
    (a).len = (b).len


如果使用上面的栗子，会发现会出现
‘a’ was not declared in this scope
‘b’ was not declared in this scope
这时我们应当对上面的macro进行修改
#define IOV_COPY(a, b)          \
    (a).base]]></description><category></category></item><item><title><![CDATA[snprintf和sprintf]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/118391072</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/118391072</guid><author>qq_42080098</author><pubDate>Thu, 01 Jul 2021 17:32:30 +0800</pubDate><description><![CDATA[笔者初识snprintf时，以为其跟printf有异曲同工之处，阅读了手册后，才发现不以为然；遂记录下来：
int snprintf ( char * s, size_t n, const char * format, ... );

Write formatted output to sized buffer
Composes a string with the same text that would be printed if format was used on printf, but instea]]></description><category></category></item><item><title><![CDATA[执行shell脚本出现 $‘\r‘: command not found]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/118215261</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/118215261</guid><author>qq_42080098</author><pubDate>Fri, 25 Jun 2021 11:30:47 +0800</pubDate><description><![CDATA[这类问题经常出现在使用不同系统或机器编写、修改脚本时，换行符不一致导致该问题出现
解决方案：
Remove trailing \r character that causes this error:
sed -i 's/\r$//' filename

Explanation:
Option -i is for in-place editing, we delete the trailing \r directly in the input file. Thus be careful to type the]]></description><category></category></item><item><title><![CDATA[Tuning multi-threaded applications]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/118093138</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/118093138</guid><author>qq_42080098</author><pubDate>Mon, 21 Jun 2021 19:39:03 +0800</pubDate><description><![CDATA[The optimization guideline covers five specific areas (arranged in order of importance):
■Thread synchronization
■Bus optimization
■Memory optimization
■Front-end optimization
■Execution-resource optimization
Key practices of thread synchronization
Key pra]]></description><category></category></item><item><title><![CDATA[Hyper threading and Pipeline]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/118001791</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/118001791</guid><author>qq_42080098</author><pubDate>Thu, 17 Jun 2021 21:00:34 +0800</pubDate><description><![CDATA[To understand what HT is, you need to understand the pipeline. The pipeline is a system in the CPU that breaks down each operation into smaller chunks and executes each of these chunks separately. Think of it like doing your laundry: you can wash your clot]]></description><category></category></item><item><title><![CDATA[虚函数(virtual function)]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/117933080</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/117933080</guid><author>qq_42080098</author><pubDate>Tue, 15 Jun 2021 20:57:08 +0800</pubDate><description><![CDATA[Virtual Function—Late binding(Runtime)
Non-virtual Function—Early binding(Compile time)
Runtime polymorphism is achieved only through a pointer(or reference) of base class type.
Name Convention, in C++, an underscore usually indicates a private member vari]]></description><category></category></item><item><title><![CDATA[vim被锁住，按什么键都不起作用，怎么办？]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/117932885</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/117932885</guid><author>qq_42080098</author><pubDate>Tue, 15 Jun 2021 20:47:29 +0800</pubDate><description><![CDATA[相信大家肯定有过这样的经历，写文档总喜欢写一点儿就"ctrl+s"或者"command+s"
如果在使用vim时，不小心“保存”瘾犯了，向终端输入"ctrl+s"或者"command+s"，这时vim如同被锁住一般，这时因为此时vim停止向终端输出
解决方案：
"ctrl+q"或者"command+q"

...]]></description><category></category></item><item><title><![CDATA[Linux中常用语句语法]]></title><link>https://blog.youkuaiyun.com/qq_42080098/article/details/117932514</link><guid>https://blog.youkuaiyun.com/qq_42080098/article/details/117932514</guid><author>qq_42080098</author><pubDate>Tue, 15 Jun 2021 20:41:31 +0800</pubDate><description><![CDATA[不定期更新：
$–&gt;#
sudo sh -c "su root"

Shell中if判断
-ne 不等于
-eq 等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
if-fi 闭合，共同构成if语句

Linux 通则匹配
bw=[[:alnum:][:punct:]]\{6\}

alnum	数字字母
punct	符号
{n}	最多n次
Shell脚本 三行变一行
sed 'N;N;s/\n/ /g' test.txt
#    n行变1行，这里就n-1个N

或者
cat te]]></description><category></category></item></channel></rss>