在这里说
选择和交叉产品
交叉产品是评估最昂贵的运营商.如果输入关系具有N和M行,则结果将包含NM行.因此,在应用交叉乘积运算符之前,尽量减小两个操作数的大小非常重要.
假设我们有2个关系
第一个关系称为Student,因此具有3个属性
student
|a |b |c |
------------
|__|___|___|
|__|___|___|
|__|___|___|
Run Code Online (Sandbox Code Playgroud)
第二个关系是大学,再次有3个属性
university
|e |f |g |
------------
|__|___|___|
|__|___|___|
|__|___|___|
Run Code Online (Sandbox Code Playgroud)
每个关系我们有3行,所以在应用了叉积运算后,我们将得到一个3*3 = 9行的关系
现在,我不明白,为什么9而不是3?
不会是最终的关系
final relation
|a |b |c |d |e |f |g |
--------------------------
|__|___|___|__|____|__|__|
|__|___|___|__|____|__|__|
|__|___|___|__|____|__|__|
Run Code Online (Sandbox Code Playgroud)
这不再有3行吗?
谢谢
我在网上搜索过这个问题,到目前为止我找到了两种方法:
while read line; do
commands
done < "$filename"
Run Code Online (Sandbox Code Playgroud)
和
for $line in $(cat $filename); do
commands
done
Run Code Online (Sandbox Code Playgroud)
如果线条有空格,这些都不起作用,例如,如果我们有这样的线条
textextext text
Run Code Online (Sandbox Code Playgroud)
它不会打印 textextext text
但
textextext
text
Run Code Online (Sandbox Code Playgroud)
它将这些事情视为一条不同的路线,我怎样才能避免这种情况发生?
可能重复:
可以在其范围之外访问局部变量的内存吗?
#include <iostream>
double *foo(){
double *varFoo = new double;
double temp = 8762;
varFoo = &temp;
return varFoo;
}
int main(void){
double *newVar = foo();
std::cout<<*newVar<<std::endl;
std::cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道指针varFoo将在堆中创建,因此将保持在那里直到我调用delete,但是在函数foo中的temp变量呢?
它是一个局部变量,一旦foo函数的调用结束,临时变量的值将被存储的地址将被释放吗?
那么为什么我得到8762而不是垃圾呢?
谢谢