int min = INT_MIN; // -2147483648
int max = INT_MAX; // 2147483647
const int INF = 0X3F3F3F3F; // 1061109567, 通常使用代替最大值,防止溢出
char c = 65;
char b = '4';
char a = 'D';
cout << std::isdigit(c) <<endl; // 0 判断C字符串是不是数字
cout << std::isalpha(c) <<endl; // 1 判断C字符串是不是字母
cout << std::isalnum(b) <<endl; // 4 判断C字符串是不是数字或者字母
cout << std::islower(a) <<endl; // 0 判断C字符串是不是小写
cout << std::isupper(a) <<endl; // 1 判断C字符串是不是大写
int num = 100;
string str = to_string(num); // 整型转化为字符产
cout << str << endl; //100
int number = stoi(str); // 数字转化为整型 ,stol
cout << number << endl; //100
vector<int> nums{1, 2, 34, 44, 56, 99};
int k = lower_bound(nums.begin(), nums.end(), 56) - nums.begin(); // 4 第一个大于等于目标值的的迭代器的位置。
cout << k << endl;
int g = upper_bound(nums.begin(), nums.end(), 56) - nums.begin(); // 5 第一个大于目标值的的迭代器的位置。
cout << g << endl;
string strTemp = "abcdEFGH";
transform(strTemp.begin(), strTemp.end(), strTemp.begin(), ::tolower);
cout << strTemp << endl; // abcdefgh
transform(strTemp.begin(), strTemp.end(), strTemp.begin(), ::toupper);
cout << strTemp << endl; // ABCDEFGH
priority_queue<pair<string,int>> pqGig; // 大根堆
for (int i = 0; i < 10; ++i) {
// emplace() 和 insert() 都能完成向 vector 容器中插入新元素,那么谁的运行效率更高呢?答案是 emplace()
pqGig.emplace(to_string(10 - i +100), i);
}
while (!pqGig.empty()){
pair<string, int> temp = pqGig.top();
cout << temp.first << ": " << temp.second <<endl;
pqGig.pop();
}
priority_queue<int ,vector<int>, greater<int>> pqLitter; // 小根堆
vector<string> tmpStr(7, ""); //数组长度为7,全部初始化为""
vector<int> tmpInt(10, 0x3f3f3f3f); //数组长度为10,全部初始化为1061109567
cout << tmpStr.size() << endl; // 7
cout << tmpInt.size() << endl; // 10
for (int i = 0; i < tmpInt.size(); ++i) {
cout << tmpInt[i] << endl; // 1061109567
}
int tmp[10];
memset(tmp, 0, sizeof tmp); // 按字节初始化数组,元素为0
memset(tmp, -1, sizeof tmp); // 按字节初始化数组,元素为-1
memset(tmp, 0x3f, sizeof tmp);// 按字节初始化数组,元素为1061109567
8、C++ 11的特性
auto p = 1; // auto
string *pre = nullptr; //nullptr替代NULL
unordered_map<int, string> mp; //哈希表,内部无序map
unordered_set<string> st; //无序集合
string str1 = "word mine sd sd";
stringstream strStream(str1);
string tmp;
while (strStream >> tmp){ // 读入数据,赋值给tmp
cout << tmp << endl;
}
char str[10];
double num = 22.234334;
sprintf(str, "%.2f", num);
string s = str;
cout << s << endl;
string aa = "110, 119, 120, 113";
char strChar[1000];
memcpy(strChar, aa.c_str(), strlen(aa.c_str()));
int u, v, w, x;
sscanf(strChar,"%d, %d, %d, %d", &u, &v, &w, &x);
cout << u <<"-"<< v <<"-" << w <<"-" << x << endl;
string tempStr(12, 'b');
struct node{
int a, b;
// 从小到大排序
bool operator < (const node& node_)const{
if(a != node_.a) return a < node_.a;
return b < node_.b;
}
};
int main(){
vector<node> tt;
tt.push_back({1,5});
tt.push_back({2,3});
sort(tt.begin(), tt.end());
for(auto &node: tt){
cout<<node.a<<" "<<node.b<<endl;
}
return 0;
}
按照第一列排序,如果第一列相等按照第二列排序
vector<vector<int>> v;
sort(v.begin(),v.end(),[](vector<int>&v1,vector<int>&v2){if(v1[0] != v2[0])return v1[0]<v2[0];else return v1[1]<v2[1];});
要包含头文件#include,该函数没有返回值。
如果是二维数组,按照行翻转,比如第一行翻转之后到最后一行。
reverse[first,last);
实例和指针的区别。
A.B则A为对象或者结构体; 点号(.):左边必须为实体。
A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针; 箭头(->):左边必须为指针。
sort(ids.begin(),ids.end(),[&](int i,int j){return nums2[i] < nums2[j];});
此时ids[0]就是原数组中最小数的坐标
或者是:
vector<pair<int,int>> v;
//第一个位置放数值,第二个位置放坐标
sort(v.begin(),v.end());
std::function是一个通用的多态函数包装器,可以调用普通函数、Lambda函数、仿函数、bind对象、类的成员函数和指向数据成员的指针,function定义在名为function.h头文件中。是一个模板,在创建function实例时,必须指明类型,如:
#include
function<int(int,int)> func//表示接受两个int,返回一个int的可调用函数
function<int(int,int)> func = [&](int a,int b){};//可以等于某个匿名函数
使用function函数可以不需要将主函数中的参数传入,直接以引用的方式捕获就可以。