目录
运算符优先级,cin, getline, 结构体key/运算符重载, unique去重
----------------------------------------------分割线-------------------------------------------------
运算符优先级
括号和取成员
() [] {} -> .
单目运算符
++ -- ! not ~ - & * sizeof 类型转换
四则运算
* / %
+ -
移位
<< >>
比较
> >= < <=
== !=
按位与
&
按位异或
^
按位或
|
逻辑与
&&
逻辑或
||
条件运算符
? :
赋值运算符
= += -= *= /= %= >>= <<= &= |= ^=
----------------------------------------------分割线-------------------------------------------------
cin(原文在此 )
标准输入缓冲区
当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换
为一个换行符(\n),这个换行符也会被存储在 cin 的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲"123456"
这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是 7 而不是 6。
cin
cin >> 从缓冲区中读取数据时,会自动忽略分隔符(空格/tab/换行),然后从第一个非分割符(非空格/tab/换行)开始把直到下一个分割字符前的数据都赋值给变量,并且下一个分割符不会从缓冲区删除(意味着可以使用cin.get()获取)。
cin.get()
cin.get() 从输入缓冲区读取单个字符且不忽略分隔符,直接将其读取。
int get(); 成功则返回ASCII值; 如 char c = cin.get();
istream& get(char& var); 如 cin.get(c);
cin.getline()
从标准输入设备键盘读取一串字符串,并以指定的结束符结束(默认为换行)
istream& getline(char* s, streamsize count, char delim);
----------------------------------------------分割线-------------------------------------------------
getline
C++ 定义了一个在 std 名字空间的全局函数 getline(),参数使用了 string,声明在<string>。
getline() 利用 cin 可以从标准输入设备键盘读取一行,当遇到如下情况会结束读操作:
(1)文件结束(EOF);
(2)遇到指定的分隔符(默认'\n');
函数原型:istream& getline (istream& is, string& str, char delim);
----------------------------------------------分割线-------------------------------------------------
结构体key/运算符重载
struct MyStruct {
float x;
int y;
//判断两个结构体是不是相等
bool operator==(const MyStruct& other) const {
return x == other.x && y == other.y;
}
// >
bool operator>(const node &b) const{
//
}
// <
bool operator<(const node &b) const{
//
}
// <=
bool operator<=(const node &b) const{
//
}
};
//告诉编译器如何计算结构体的哈希值
namespace std {
template<> struct hash<MyStruct> {
size_t operator()(const MyStruct& s) const {
return hash<float>()(s.x) ^ hash<int>()(s.y);
}
};
}
----------------------------------------------分割线-------------------------------------------------
unique去重
unique返回去重后的最后一个元素的下一个位置;
unique(起始位置, 最后一个元素的下一个位置);
unique(…) - 起始位置可得到去重后的元素个数
.erase(起始位置, 最后一个元素的下一个位置);物理上删除这些元素
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());