最近我一直在观看" C ++简介"视频,其中一些比其他视频更好地解释某些概念。但是,有一些视频没有解决,这就是胡萝卜括号的含义。
例如:
DataFrame df = sqlContext.read().json(input);
DataFrame dfMaxRaw = df.groupBy("id").max("val");
DataFrame dfMax = dfMaxRaw.select(
dfMaxRaw.col("id").as("max_id"), dfMaxRaw.col("max(val)").as("max_val")
);
DataFrame combineMaxWithData = df.join(dfMax, df.col("id")
.equalTo(dfMax.col("max_id")));
DataFrame finalResult = combineMaxWithData.filter(
combineMaxWithData.col("id").equalTo(combineMaxWithData.col("max_id"))
.and(combineMaxWithData.col("val").notEqual(combineMaxWithData.col("max_val")))
);
我只对上述功能的第一行感兴趣。如果我理解正确,cout会打印后面的变量或值,而endl表示行结束时代表int main(){
cout << "Hello World" << endl;
return 0;
}
。
我用谷歌搜索过的C ++运算符和关键字,虽然&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;显然也可以作为二元左移算子......
为了澄清我来自Python / Java背景,所以我期待一个逗号或附加符号。我想知道是否&lt;&lt;是相当于这些或做类似但不同的东西。
感谢。
答案 0 :(得分:6)
这些不是&#34;胡萝卜括号&#34;。 <<
是left-bitshift运算符,仅此而已。
您可以使用<<
打印内容,因为C ++允许您更改操作符对特定类的行为方式。这称为运算符重载。 <<
重载,std::cout
表现为打印功能。
答案 1 :(得分:4)
C ++允许运算符重载,因此<<
的含义会根据所涉及的类型而改变。 cout
的类型为ostream
,它会重载<<
以写入流。
Here is a listing of many of them请注意,它不是一个完整的列表,因为您可以在ostream
类之外定义运算符,如this example on MSDN of a Date中那样。
答案 2 :(得分:4)
在流的语义上下文中,<<
被称为&#34;流插入运算符&#34; >>
被称为&#34;流提取运算符。从语法上讲,它们与在整数上进行语义操作的左右移位运算符相同。
从Java的上下文中,您应该熟悉+
运算符,它根据其参数是int,float还是字符串而有不同的行为(尽管C ++允许一般的重载)。
std::endl
与'\n'
的不同之处在于它还会刷新流(请注意,std::cout
默认情况下是行缓冲的,如果它要转到终端)。
使用+
输出意味着会创建一堆不必要的临时字符串,而重载,
(如&&
或||
)会令人惊讶,因为它会隐藏内置的意思。
如果在C ++处于早期阶段时可以使用可变参数模板,它可能不会使用<<
,而是使用成员函数。