C++ stringstream類的用法
一、類型轉(zhuǎn)換-數(shù)字->字符串
#include<bits/stdc++.h>
using namespace std;
int main()
{
stringstream ss;
int num = 35;
string s;
ss << num;
ss >> s;
cout << s << endl;
return 0;
}
二、類型轉(zhuǎn)換--字符串->數(shù)字
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s = "123";
stringstream ss;
int num;
ss << s;
ss >> num;
cout << num << endl;
return 0;
}
三、以空格解析字符串
#include <iostream>
#include <sstream>
#include<string>
using namespace std;
int main(void)
{
stringstream ss;
string s="2 3 4 5 6";
int sum = 0;
ss << s;
int num;
while (ss>>num) {
sum += num;
}
cout << sum << endl;
return 0;
}
二、歐幾里得算法
int gcd(int a,int b){
if(b==0)return a;
gcd(b,a%b);
}
三、二分查找答案
const int N = 0x3f3f3f3f;
int main()
{
int ans, l, r;
int l = a, r = b;
while (l <= r) {
mid = (l + r) / 2;
if (check(mid)) {
ans = mid;
mid + l + 1;
}
else mid = r - 1;
}
cout << ans << endl;
return 0;
}
四、雙端隊列deque
push_back 在末尾插入元素,不斷擴(kuò)張隊列
push_front 在隊頭覆蓋元素 不會擴(kuò)張隊列
#include<bits/stdc++.h>
using namespace std;
int main()
{
deque<int> d;
d.push_back(1);
d.push_back(2);
cout << d.front() << endl; //隊頭
cout << d.back() << endl;//隊尾
d.push_front(10);
cout << d[0] << ' ' << d[1] << endl;
return 0;
}
五、優(yōu)先隊列
1、優(yōu)先隊列的定義
priority_queue<a,vector<a>,greater<a> >que1;
priority_queue<a,vector<a>,less<a> >que2;
因為優(yōu)先隊列其實是一個堆
greater 是從小到大
less是從大到小
默認(rèn)是從大到小
2、重載運算符
bool operator<(A a1,A a2){
return a1.r<a2.r;
}
bool operator(A a1,A a2){
return a1.l>a2.l;
}
大于號>的重載對應(yīng)了greater的重載,是根據(jù)重載規(guī)則從小到大排序
小于號<的重載對應(yīng)了less的重載,是根據(jù)重載規(guī)則從大到小排序
六、set
set里面每個元素只存有一個key值,它支持高效的關(guān)鍵字查詢操作,比如檢查一個關(guān)鍵字是否在set中。如果這個key值之前存在的話就不插入。
#include<bits/stdc++.h>
using namespace std;
int main()
{
set<int> s;
s.insert(2);
set<int>::iterator iter;
iter = s.find(2);
cout << *iter << endl;
s.erase(2);
cout << s.count(2) << endl;
cout << s.count(1) << endl;
return 0;
}
七、map
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<int, string> m;
m[1] = "a";
m[2] = "b";
cout << m[1] << endl;
cout << m[2];
map<int, string>::iterator iter;
iter = m.begin();
for (iter; iter != m.end(); ++iter) {
cout << iter->first << ' ' << iter->second << endl;
}
return 0;
}
八、reverse
reverse反轉(zhuǎn)字符串
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
string N;
cin>>N;
reverse(N.begin(), N.end());
cout<<N<<endl;
}
reverser反轉(zhuǎn)字符數(shù)組
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main() {
char a[101];
cin.getline(a,sizeof(a));
int m=strlen(a);
reverse(a,a+m);
puts(a);
}
九、快速冪
typedef long long ll;
ll quick_pow(ll x,ll n,ll m){
ll res=1;
while(n>0){
if(n&1)res=res*x%m;
x=x*x%m;
n>>=1;
}
return res;
}
十、去重函數(shù) unique
#include <iostream>
#include <algorithm> // sort(), unique()
#include <functional> // less<int>()
using namespace std;
int main()
{
int i;
int a[10] = { 0, 7, 7, 6, 1, 1, 5, 5, 8, 9 };
sort( a, a + 10, less<int>() ); // 排序
int n = unique(a, a + 10) - a; // 去重
for ( i = 0; i < n; i++) // 注意i < n
cout << a[i] << " "; // 0 1 5 6 7 8 9
}
十一、map中的count和find函數(shù)
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<string, int> m;
m.insert(make_pair("test1", 1));
m["test2"] = 2;
map<string, int>::iterator it;
it = m.find("test2");
cout << it->second << endl;
cout << m.count("test1") << endl;
cout<<m.count("test2")<<endl;
return 0;
}