stoi:
stoi(s,start,base)//s是要转换的字符串,start是起始位置,base是要转换的整数进制,默认是从0位置开始,转换为10进制
int main() {
string str = "123";
int res = stoi(str);
cout << res << endl;
system("pause");
return 0;
}
to_string
to_string(val)//val可以是任何数值类型
int main() {
int num = 123;
string res = to_string(num);
cout << res << endl;
system("pause");
return 0;
}
分割字符串可以使用getline和istringstream联合实现。
//根据','号分割字符串,getline默认的是按照行读取,但是指定就按照给定的标志分割。
int main() {
string str = "1,2,3,4,5";
istringstream s_in(str);
string c;
while (getline(s_in, c, ',')) {
cout << c << endl;
}
system("pause");
return 0;
}
int main() {
string s = "1,2,3,4,5";
int len = s.size();
int start = 0;
while (start < len) {
int end = start;
while (end < len && s[end] != ',')++end;
string c = s.substr(start, end - start);
start = end + 1;
cout << c << endl;
}
system("pause");
return 0;
}
c++可以使用c的类型转换即 (type-id)expression,同时也有自己的类型转换,在leetcode中常用的是static_cast。
static_cast<new type>(expression)
详细解释
isalpha(char c)//判断是否为字母
isdigit(char c)//判断是否为数字
isalnum(char c)//判断是否为数字或字母
tolower(char c)//变成小写字母
toupper(char c)//变成大写字母
下面两个的都是STL下的
用于在指定区域内(左闭右开)查找不小于目标值的第一个元素,也就是说最终查找的不一定是和目标值想等的元素,也可能是比目标值大的元素。其底层实现是二分查找。
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val)
int main() {
vector<int>nums{ 1,2,3,5,5 };
auto it1 = lower_bound(nums.begin(), nums.end(), 3);
cout << *it1<< endl;
auto it2 = lower_bound(nums.begin(), nums.end(), 4);
cout << *it2 << endl;
system("pause");
return 0;
}
在指定目标区域中查找大于目标值的第一个元素,返回该元素所在位置的迭代器。
int main() {
vector<int>nums{ 1,2,3,5,5 };
auto it1 = upper_bound(nums.begin(), nums.end(), 3);
cout << it1-nums.begin()<< endl;
auto it2 = upper_bound(nums.begin(), nums.end(), 4);
cout << it2-nums.begin() << endl;
system("pause");
return 0;
}
对于set和map来说其有属于自己类的lower_bound和upper_bound。
//在两者都能使用时,尽量使用set和map下的,其效率高于STL中的。
set.lower_bound(val)
map.lower_bound(val)
这里需要知道对正数和符数取余的结果,取余通常用于是否能够整除某个数。
int main() {
vector<int>nums{ 1,2,-1,-2,-4,4 };
for (int n : nums) {
cout << n % 3 << endl;
}
system("pause");
return 0;
}