<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CTTACM的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/CTTACM</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CTTACM]]></copyright><item><title><![CDATA[剑指 Offer 12. 矩阵中的路径]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/112261424</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/112261424</guid><author>CTTACM</author><pubDate>Wed, 06 Jan 2021 14:37:00 +0800</pubDate><description><![CDATA[class Solution {
public:
    bool exist(vector&lt;vector&lt;char&gt;&gt;&amp; board, string word) {
        rows = board.size();
        cols = board[0].size();
        for(int i = 0; i &lt; rows; i++) {
            for(int j = 0; j &lt; cols; j++) {
     ]]></description><category></category></item><item><title><![CDATA[数据结构之---树]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/110889383</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/110889383</guid><author>CTTACM</author><pubDate>Tue, 08 Dec 2020 21:27:19 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
// 二叉树的遍历算法
class Node {
public: // 可以看出，c++中class如果不加声明，其默认成员是私有的。
	int v;
	Node* left;
	Node* right;
	Node(int vs):v(vs),left(nullptr), right(nullptr){} // 注意这里的{}后不用加分号
};
typedef stru]]></description><category></category></item><item><title><![CDATA[智能指针]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108712301</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108712301</guid><author>CTTACM</author><pubDate>Mon, 21 Sep 2020 15:56:00 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;
#include&lt;memory&gt;
using namespace std;
int main() {
	// c++ 需要程序员管理堆内存、和资源（临界区，文件）的申请和释放
	// 动态分配对象的生存期与他们在哪里创建是无关的，只有当显式的被释放时，这些对象才会销毁
	// new:在动态内存中为对象分配空间并返回一个指向该对象的指针
	// deleted:接受一个动态对象的指针，销毁对象，并释放与之关联的内存
	int* p = new i]]></description><category></category></item><item><title><![CDATA[2020-09-21]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108712120</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108712120</guid><author>CTTACM</author><pubDate>Mon, 21 Sep 2020 15:53:57 +0800</pubDate><description><![CDATA[reinterpret_cast：可以用于任意类型的指针之间的转换，对转换的结果不做任何保证
dynamic_cast：这种其实也是不被推荐使用的，更多使用static_cast，dynamic本身只能用于存在虚函数的父子关系的强制类型转换，对于指针，转换失败则返回nullptr，对于引用，转换失败会抛出异常
const_cast：对于未定义const版本的成员函数，我们通常需要使用const_cast来去除const引用对象的const，完成函数调用。另外一种使用方式，结合static_cast，可以..]]></description><category></category></item><item><title><![CDATA[多态与虚函数]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108711500</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108711500</guid><author>CTTACM</author><pubDate>Mon, 21 Sep 2020 15:39:32 +0800</pubDate><description><![CDATA[#pragma once
// 在类的定义中，前面有virtual关键字的成员函数就是虚函数
class base
{
	virtual int get();
};
int base::get() {};
// virtual 关键字只用在类定义的函数声明中，写函数体时不用
// 构造函数和静态成员函数不能是虚函数
// 析构函数应为虚函数

/// 多态的表现形式一
/// 1. 派生类的·指针·可以赋值给·基类指针·
/// 2. 通过基类指针调用基类和派生类中的同名虚函数：
///		1）若该指针指向]]></description><category></category></item><item><title><![CDATA[c++ 之 extern]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108710541</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108710541</guid><author>CTTACM</author><pubDate>Mon, 21 Sep 2020 15:11:35 +0800</pubDate><description><![CDATA[变量声明与定义的关系：

声明：规定了变量的类型和名字，使得名字为程序所知。一个文件想要使用别处定义的名字则必须包含对哪个名字的声明。


定义：为变量申请空间，还可能为变量附一个初始值。定义负责创建与名字相关的实体。

如果想声明一个变量而非定义它，就在变量名前面添加关键字extern，且不要显式的初始化变量。
eg.
extern int i;  // 声明i而不是定义
int j;   // 声明并定义j

变量能够多次声明，却只能定义一次。

一个const对象，如果想被外部文件使用必须声明为ext]]></description><category></category></item><item><title><![CDATA[TCP拥塞控制方法]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108703257</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108703257</guid><author>CTTACM</author><pubDate>Mon, 21 Sep 2020 11:35:05 +0800</pubDate><description><![CDATA[慢开始-》拥塞避免-》快重传-》快恢复。
概念：
可靠通信

停止等待：每发送一个分组，就停止发送，等待对方的确认，收到确认后再发送下一个分组。


累积确认：接收方不必对收到的分组逐个发送确认，而是收到几个分组后，对按序到达的最后一个分组发送确认。


超时重传：发送方过了一段时间（超时计时器到期）没有收到确认，就认为发送的分组丢失了，就重传前面的分组。

可靠通信：使用确认和重传机制，TCP在不可靠的传输网络上实现可靠的通信。
流量控制：

滑动窗口： 以字节为单位的滑动窗口，包括了发送方的发送窗口和接]]></description><category></category></item><item><title><![CDATA[去除有序数组中重复项（原地）]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108695540</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108695540</guid><author>CTTACM</author><pubDate>Sun, 20 Sep 2020 17:13:04 +0800</pubDate><description><![CDATA[STL源码剖析：
vector&lt;int&gt; v{ 1,1,2,2,3,4,4,5 };
int iter = 0;
int end = v.size();
int result = 0;  
while (++iter != end) {
	// 元素不同就记录，否则，就跳过
	if (v[iter] != v[result]) v[++result] = v[iter];
}
v.resize(++result); // 去除了数组末尾废弃的元素。


...]]></description><category></category></item><item><title><![CDATA[B+树和红黑树不要搞混了]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108677450</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108677450</guid><author>CTTACM</author><pubDate>Sat, 19 Sep 2020 10:12:09 +0800</pubDate><description><![CDATA[B+树：用在磁盘文件组织 数据索引和数据库索引。
红黑树：c++ STL中的 set 和 map
unordered_map：hash

]]></description><category></category></item><item><title><![CDATA[哔哩哔哩编程题]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108328101</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108328101</guid><author>CTTACM</author><pubDate>Mon, 31 Aug 2020 19:49:42 +0800</pubDate><description><![CDATA[脸滚键盘：
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;unordered_map&gt;
using namespace std;
int main() {
    int n;
    string S;
    while (getline(cin, S)) {
        int i = 0;
        while (S[i] != ' ') {
            i++;
        }
       ]]></description><category></category></item><item><title><![CDATA[求1 + 2 +... + n（待续）]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108321944</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108321944</guid><author>CTTACM</author><pubDate>Mon, 31 Aug 2020 15:21:32 +0800</pubDate><description><![CDATA[代码1：
class Solution {
public:
    Solution(){N++; Sum+=N;}
    static void reset(){N = 0; Sum = 0;}
    static int getSum(){return Sum;}
private:

    static int N;
    static int Sum;
public:
    int sumNums(int n) {
        reset();
        Solution *a =]]></description><category></category></item><item><title><![CDATA[c++函数指针作用]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108312137</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108312137</guid><author>CTTACM</author><pubDate>Sun, 30 Aug 2020 22:25:22 +0800</pubDate><description><![CDATA[代码：
#include&lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
// 函数指针使用的函数
int max_value(int a, int b)
{
    return (a &gt; b) ? a : b;
}

//声明函数指针，此时函数指针没有指向任何函数
int (*pFun)(int a, int b);  

int main(int argc, char** argv)
{
    int max1, max2]]></description><category></category></item><item><title><![CDATA[c++ memcpy函数的实现]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108310213</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108310213</guid><author>CTTACM</author><pubDate>Sun, 30 Aug 2020 20:24:41 +0800</pubDate><description><![CDATA[memcpy函数作用：

将由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内，函数返回一个指向dest的指针

特别说明：

1.src和dest所指内存区域不能重叠
2.与strcpy相比，memcpy遇到‘\0’并不会结束，而是一定会拷贝完n个字节
3.memcpy可以拷贝任何数据类型的对象，可以指定拷贝的数据长度
4.如果dest本身就有数据，执行memcpy（）后会覆盖原有的数据
5.dest和src都不一定数组，任意的可读写的空间均可
6.如果要追加数据，则]]></description><category></category></item><item><title><![CDATA[static：类的静态成员]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108304163</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108304163</guid><author>CTTACM</author><pubDate>Sun, 30 Aug 2020 11:20:27 +0800</pubDate><description><![CDATA[#include&lt;iostream&gt;
#include&lt;string&gt;
using namespace std;

class Account {
public:
    void calculate() { amount += amount * interestRate; }  // 成员函数不通过Account::就可以直接访问static成员
    static double rate() { return interestRate; } // 这里不允许使用类的非静态成员，]]></description><category></category></item><item><title><![CDATA[删除链表第k个结点]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108298422</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108298422</guid><author>CTTACM</author><pubDate>Sat, 29 Aug 2020 19:29:24 +0800</pubDate><description><![CDATA[// 删除链表第k个结点，输出剩余序列
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;

using namespace std;
struct Node {
	int v;
	Node* next;
	Node(int n) {
		v = n;
		next = nullptr;
	}
};
int main() {
	int n, k;
	while (cin &gt;&gt; n &gt;&gt; k) {]]></description><category></category></item><item><title><![CDATA[c++中的const]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108281207</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108281207</guid><author>CTTACM</author><pubDate>Sat, 29 Aug 2020 19:19:31 +0800</pubDate><description><![CDATA[const
作用
修饰变量，说明该变量不可以被改变；
修饰指针，分为指向常量的指针（pointer to const）和自身是常量的指针（常量指针，const pointer）；
修饰引用，指向常量的引用（reference to const），用于形参类型，即避免了拷贝，又避免了函数对值的修改；
修饰成员函数，说明该成员函数内不能修改成员变量。
const 的指针与引用
指针
指向常量的指针（pointer to const）
自身是常量的指针（常量指针，const pointer）
引用
指向常量的引用]]></description><category></category></item><item><title><![CDATA[设计模式]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/107992298</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/107992298</guid><author>CTTACM</author><pubDate>Thu, 27 Aug 2020 14:38:54 +0800</pubDate><description><![CDATA[单例模式：
单例模式的优点：

减少内存开支
减少系统调用
避免资源的多重占用
线程安全

死锁：
某台计算机连接了8个相同的设备，有N个进程在竞争使用，每个进程最多会同时占用3个设备，请问当N大于等于多少时，系统可能发生死锁？
用户态&amp;内核态
以下哪种操作不会导致计算机从用户态切换至内核态？
访问内存时出现缺页异常
对一个变量进行取模运算
创建一个子进程
读取硬盘中文件的内容
以下数据库事务的隔离级别中哪一个可能造成脏读
读取未提交内容（Read Uncommited）
读取提交内容（Read C]]></description><category></category></item><item><title><![CDATA[关于x&(x-1)的作用]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108240841</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108240841</guid><author>CTTACM</author><pubDate>Wed, 26 Aug 2020 15:31:34 +0800</pubDate><description><![CDATA[x = x&amp;(x-1):每执行一次x =x&amp;(x-1)，会将x用二进制表示时最右边的一个1变为0，因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
// 判断一个数字的二进制中有几个1
#include&lt;iostream&gt;
using namespace std;
int main() {
	int x;
	while (cin &gt;&gt; x) {
		int count = 0;
		while (x) {
			x = x &amp; (x - 1);
]]></description><category></category></item><item><title><![CDATA[最大公约数的求法---辗转相除法]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108236875</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108236875</guid><author>CTTACM</author><pubDate>Wed, 26 Aug 2020 15:04:31 +0800</pubDate><description><![CDATA[辗转相除法：
辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的：

1.若r是a÷b的余数,则gcd(a,b)=gcd(b,r)
2.a和其倍数之最大公因子为a。
3. 0 可以除尽任何数，所以0和任何数的最大公约数都是那个“任何数”

另一种写法是：

1.a÷b，令r为所得余数（0≤r＜b）。若r=0，算法结束；b即为答案。
2.互换：置a←b，b←r，并返回第一步。
代码：

#include&lt;iostream&gt;
#include&lt;vector&gt;

using na]]></description><category></category></item><item><title><![CDATA[简单的01背包问题]]></title><link>https://blog.youkuaiyun.com/CTTACM/article/details/108236129</link><guid>https://blog.youkuaiyun.com/CTTACM/article/details/108236129</guid><author>CTTACM</author><pubDate>Wed, 26 Aug 2020 11:10:20 +0800</pubDate><description><![CDATA[大疆面试的题目，一道01背包的题目只过了50%案例
背包问题核心代码：
vector&lt;vector&lt;int&gt; &gt; dp(n, vector&lt;int&gt;(n, 0));
for (int i = 1; i &lt; n; i++) {  // 物品
	for (int j = 1; j &lt; n; j++) {  // 容量
		if (j - volume[i] &gt; 0) {  // 
			dp[i][j] = max(dp[i - 1][j], dp[i][j]]></description><category></category></item></channel></rss>