大小写字母的转换
//大写字母 A - Z 的 ASCII 码范围为 [65,90]
//小写字母 a - z 的 ASCII 码范围为 [97,122]
//数字 0 - 9 的 ASCII 码范围为 [48,57]
string toLowerCase(string s) {
for (char& ch: s) {
if (ch >= 65 && ch <= 90) {
ch += 32;
}
}
return s;
}
char和int的转换
//通过加减'0'实现
char a = '5';
int b = 5;
int int_a = a - '0'; //数字5
char char_b = b + '0'; //'5'
强制类型转换
int b = 2;
double a = static_cast<double>(b); //编译期间转换
//数值型比如 int, float, double 转换为 string 可以使用函数std::to_string()
int a = stoi(s)//string转换为int类型
set<int> st(vec.begin(), vec.end()); // vector → set
vec.assign(st.begin(), st.end()); // set → vector
哈希表映射
void romanToInt(string s) {
map<char,int> Roman2Int = {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}
};
for(int i=0;i<s.size();i++){
int value = symbol[s[i]];
}
}
vector
- 创建空向量
vector<int> vec;
vec.size(); //使用size()函数可以获取向量的大小
- 初始化向量
vector<int> vec(len, 0); //初始化一个长度为len,全为0的向量
- 添加元素
vec.push_back(1); //使用push_back()函数可以在向量的末尾添加一个元素
vec.insert(vec.begin(), 1); // 在vector的开始位置插入元素1
- 删除元素
vec.pop_back(); //移除最后一个元素
vec.erase(vec.begin() + 1); // 删除第二个元素
vec.erase(vec.begin(), vec.begin() + 3); // 删除前三个元素
- 判断向量是否为空
bool is_empty = vec.empty();
- 查找元素
auto it = find(vec.begin(),vec.end(),1);
auto it = vec.find(1); // 查找是否包含值为1的元素
if (it != vec.end()) {
// 找到了元素
} else {
// 没找到元素
}
- 排序
sort(vec.begin(), vec.end()); //正向排序
sort(vec.begin(), vec.end(), [](int a, int b) { //逆向排序
return a > b;
});
DFS和BFS
DFS(深度优先搜索) 遍历使用递归
void dfs(TreeNode* root)
{
if (root == nullptr)
{
return;
}
// 依次递归遍历它的左子树和右子树
dfs(root->left);
dfs(root->right);
}
BFS(广度优先搜索) 遍历使用队列数据结构
void bfs(TreeNode* root)
{
// 创建一个队列
queue<TreeNode*> q;
q.push(root);
while (!q.empty())
{
// 在每次循环中,使用 q.front() 获取队头节点,并将其出队
TreeNode* node = q.front();
q.pop();
// 检查这个节点的左右子节点是否为空,如果不为空,就将它们加入队列中
if (node->left != nullptr)
{
q.push(node->left);
}
if (node->right != nullptr)
{
q.push(node->right);
}
}
}