算法分析题4

采用分治法求树中任意两点之间距离小于K的点对及路径。要求:poj1741 Tree及1655

不懂1:
struct node {
int v, l;
node() {};
node(int _v, int _l): v(_v), l(_l) {};
};
其中的 node() {};
node(int _v, int _l): v(_v), l(_l) {};的作用?
答:node(int _v, int _l): v(_v), l(_l) {};为结构体构造函数,此处即将_v值赋给v,_l的值赋给l,还有多种类型的构造函数,参考:
https://blog.csdn.net/emm_titan/article/details/102980082

例1:

struct CC
  {
    int a;
    int b;
   }x1,x2;

此时x1,x2就是已经定义好的CC类型的变量了,这种情况在声明时struct前就一定不能加typedef,如果加上了,x1,x2就成了和CC一样的结构体类型了,而不是变量了。

例2:
用typedef的情况。这种情况,定义变量必须在结构体声明之后定义。
使用typedef可以在结构体外部顺便定义此结构体的别名、指针类型、二级指针类型、数组类型等。

typedef struct _ABC
 {
    int a;
    int b;
 }ABC,*pABC,ABC_ARRY[20];

注意和前一种情况的区别,一个是实例,一个是类型。
参考:
https://blog.csdn.net/loong460/article/details/51452378

不懂2:
#include <string.h>
void *memset(void s, int c, unsigned long n);
函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void
型的指针变量,所以它可以为任何类型的数据进行初始化。
memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。
样例:

#include <iostream>
using namespace std;
int main()
{ int f[5]={};
memset(f,-1,sizeof(f));
for(int i = 0; i != 5; i++)
cout<<f[i]<<" ";
memset(f,1,sizeof(f));
cout<<endl;
for(int i = 0; i != 5; i++)
cout<<f[i]<<" ";
system("pause");
return 0;
}


为啥会输出下一行内容

语句的作用:

bool done[N];
memset(done, false, sizeof(done));

知识点三:
vector的push_back函数
void push_back(const T& x):向量尾部增加一个元素X
int size() const:返回向量中元素的个数,

v . size ()

返回 v 中元素的个数。

不懂:

struct node {
    int v, l;
    node() {};
    node(int _v, int _l): v(_v), l(_l) {};
};
vector<node> g[N];

答:创建了N个存node的vector,相当于一个二维vector,
g[now].size()是什么意思

两个二维vector的区别:

vector<int> V1[]        {{1,2,3}, {4,5,6}};
vector<vector<int>> V2  {{1,2,3}, {4,5,6}};

可以参考:

https://blog.csdn.net/dengm155/article/details/53147904?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai

有一个答:
如果是g[5]就表示建立了 5个vector,每个vector都可以独立添加元素。(类似于二维数组,但是第一维长度固定)
如果是g(5) 就表示建立了一个vector,现在的长度为5,且初始化为0(类似一维数组);参考:
https://zhidao.baidu.com/question/332669574017686085.html
我觉得应该就是上面这个意思。


版权声明:本文为m0_37425558原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。