1、priority_queue
默认是大根堆,但可以通过一些方式将其转换为小根堆。
// 定义一个小根堆
std::priority_queue<int, std::vector<int>, std::greater<int>> min_heap;
//定义一个大根堆
std::priority_queue<int, std::vector<int>, std::less<int>> max_heap;
2、C++hashset用unordered_set
unordered_set<int> hashset; 声明
hashset.insert(3); 插入
hashset.find(5) != hashset.end() 查找
hashset.erase(1); 删除
hashset.size() 总个数
3、数组默认不初始化,静态储存期的全局数组会初始化。
数组初始化方法:
memset(arr, 0, sizeof(arr)); // 将数组 arr 的所有元素设置为 0
函数:void* memset(void* ptr, int value, size_t num);
声明数组的方法:
int row[9][9];
4、vector拼接方法:
// 在vec1的后面拼接vec2
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
// 在vec3的前面拼接vec1
vec3.insert(vec3.begin(), vec1.begin(), vec1.end());
5、在C++中,.size()是成员函数,用于返回成员或元素数量sizeof()是运算符,用于计算类型或对象的大小,以字节为单位。
6、在C++中,要将字符(char)添加到字符串(string),可以使用 push_back
方法或者直接使用 +=
运算符。
7、unordered_map使用方法:
创建:
unordered_map<KeyType, ValueType> myMap;
unordered_map<std::string, int> ageMap;
插入:
myMap[key] = value;
访问:
value = myMap[key];
查找:
auto it = ageMap.find("Alice");
if (it != ageMap.end()) {
// 元素存在
} else {
// 元素不存在
}
删除:
myMap.erase(key);
遍历:
for (const auto& pair : myMap) {
// pair.first 是键,pair.second 是值
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
获取大小:
size_t size = myMap.size();
是否为空:
if (myMap.empty()) {
// map为空
}
取值:
.first key
.second val
8、队列使用方法:
创建:
queue<int> myQueue;
添加:
myQueue.push(10);
访问前端:
myQueue.front();
弹出前端:
myQueue.pop();
是否为空:
myQueue.empty();
元素数量:
myQueue.size();
9、栈使用方法:
创建:
stack<int> myStack;
压入:
myStack.push(10);
访问栈顶:
myStack.top();
弹出:
myStack.pop();
空:
myStack.empty()
大小:
myStack.size()
10、位运算使用方法:
按位与(&):将两个操作数的每个对应位都为1时,结果的对应位为1,否则为0:
int result = num1 & num2;
按位或(|):将两个操作数的每个对应位都为0时,结果的对应位为0,否则为1:
int result = num1 | num2;
按位异或(^):将两个操作数的每个对应位相同则为0,不同则为1:
int result = num1 ^ num2;
按位取反(~):对操作数的每个位取反(0变为1,1变为0):
int result = ~num;
左移(<<):将操作数的所有位向左移动指定的位数,并在低位补零:
int result = num << shift_amount;
右移(>>):将操作数的所有位向右移动指定的位数。对于有符号整数,右移会用符号位填充左侧空出的位;对于无符号整数,右移会用0填充左侧空出的位:
int result = num >> shift_amount;