STL用法學習
一、sort排序
//STL學習
//sort排序
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[] = {2, 10, 4, 3, 1, 5, 9};
sort(a, a + 7);
for (int i = 0; i < 7; i++)
{
cout << a[i] << " ";
}
return 0 ;
}
二、字符串string
1.簡單使用
1.簡單使用
//c語言
#include <iostream>
using namespace std;
int main()
{
char *ch = "abcdff";
for (int i = 0; ch[i] != '\0'; i++)cout << *(ch + i);
return 0 ;
}
//c++語言
#include <iostream>
using namespace std;
int main()
{
string s = "abcdff";
cout << s <<endl;
return 0;
}
2.獲取一行數據例如hello world
2.獲取一行字符串,比如獲取hello world
#include <iostream>
using namespace std;
int main()
{
char ch[103];
scanf("%s", ch);//只能獲取hello
printf("%s", ch);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin, s);//獲取一行數據
cout << s;
return 0;
}
3.+=運算符
3.+=運算符
#include <iostream>
using namespace std;
int main()
{
string s;
s += "hello";
s += " world";
s += "5";
s += 10;//換行了,因爲10對應ASCII是換行
int a = 5;
s += (a + '0'); //加了個5;
cout << s;
return 0;
}
4.字符串相關排序
4.排序,使用algorithm裏面的sort
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s = "5418769";
cout << *s.begin();
sort(s.begin(), s.end());//傳入了頭迭代器和尾迭代器
cout << s;
return 0;
}
5.erase函數
//5.erase函數
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s = "5418769";
s.erase(s.begin());//去掉第一個
s.erase(-- s.end());//去掉第二個
cout << s;
return 0;
}
6.substr函數
//6.substr函數比如取5418769中的418
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200111165832675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmdmdXNoaW5pemlqaQ==,size_16,color_FFFFFF,t_70)#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s = "5418769";
s = s.substr(1, 3);//從第一個取,取3個;第一個參數是索引,第二個是取幾個
s = s.substr(1, -1);// 索引爲1截斷到最後
cout << s;
return 0;
}
7.循環方式for循環 +auto
//7.循環方式for循環
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s = "5418769";
//方式1
for (int i = 0; i < s.length(); i++) cout << s[i] << endl;
//方式2
//for (string::iterator it = s.begin(); it != s.end(); it++) cout << *it;
//for (auto it = s.begin(); it != s.end(); it ++) cout << *it;//嫌麻煩可以這麼寫
//for (auto x : s) cout << x;
return 0;
}
三、vector用法
1.定義和構造
vector相當於數組,模板類型相當於存放的內容
//vector相當於數組,模板類型相當於存放的內容
//定義和構造
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n[] = {1,2,3,4,5};
vector<int> v;//定義一個空vector
vector<int> v2(4);//定義一個4個大小的vector,初始爲0
vector<int> v3(4, 6);//定義一個4個大小的vector,初始爲6
vector<int> v4(n, n + 5);//定義一個vector,數字爲12345
for (int i = 0; i < v.size(); i++) cout <<v[i] << " ";
cout << endl;
for (int i = 0; i < v2.size(); i++) cout <<v2[i] << " ";
cout << endl;
for (int i = 0; i < v3.size(); i++) cout <<v3[i] << " ";
cout << endl;
for (int i = 0; i < v4.size(); i++) cout <<v4[i] << " ";
return 0;
}
2.用at或者[]獲取元素
//用at或者[]獲取元素
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n[]= {1,2,3,4,5};
vector<int> v(n, n + 5);
cout << v[1] << endl;//取索引爲1的
cout << v.at(2);//取索引爲2的
return 0;
}
3.方法
1.push_back追加內容
2.resize進行重置大小,不賦值默認爲0
3.erase刪除元素,複雜度爲O(N)
4.獲取第一個元素
5.獲取最後一個元素
//方法
//push_back追加內容
//resize進行重置大小,不賦值默認爲0
//erase刪除元素,複雜度爲O(N)
//front獲取第一個元素
//back獲取最後一個元素
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(6);
v.resize(10);//後面補0
v.erase(v.begin());
v.erase(-- v.end());
for (int i = 0; i < v.size(); i++)
{
cout << v[i] ;
}
cout << endl;
//取第一個
cout << v[0];
cout << *v.begin();
cout << v.front();
cout << endl;
//取最後一個
cout << v.back();
cout << v[v.size() - 1];
cout << * --v.end();
return 0;
}
4.排序算法
//排序算法
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a[] = {5,1,2,4,0,-1};
vector<int> v(a, a + 6);
//從小到大排序,默認不寫是less<int>
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
sort(v.begin(), v.end(), greater<int>());//從大到小排序
for(int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
return 0;
}
5.輸出
1.for循環
2.迭代器循環
//輸出
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int a[] = {4,3,6,8,7,9};
vector<int> v(a, a + 6);
//for循環
for (int i = 0; i < v.size();i ++) cout << v[i] << " ";
cout << endl;
//迭代器循環
for (vector<int> :: iterator it = v.begin(); it != v.end(); it++) cout << *it << " ";
return 0;
}
四、stack用法&字符串和數字轉換
1.定義和構造
//定義和構造
//push入棧一個元素
//pop出棧一個元素,pop無返回值
//top取棧頂元素
//size查看元素個數
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
s.push(2);
s.push(3);
cout << s.size() << endl;
cout << s.top() << endl;//說明是先進後出的一個容器
s.pop();
cout << s.top() << endl;
return 0;
}
2.正序和逆序輸出
#include <cstring>
#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
#include <sstream>
using namespace std;
int main()
{
string str;
getline(cin, str);
stringstream ss;
ss << str;
while(ss >> str) cout << str;
return 0;
}
//逆序輸出
#include <cstring>
#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
#include <sstream>
using namespace std;
int main()
{
string str;
stack<string> s;
getline(cin, str);
stringstream ss;
ss << str;
//while(ss >> str) cout << str;
while(ss >> str) s.push(str);
while(!s.empty())
{
cout << s.top();
s.pop();
if(s.size() != 0) cout << " ";
}
return 0;
}
3.流入流出數字和字符串轉換
字符串轉數字
//字符串轉數字
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <sstream>
using namespace std;
int main()
{
string s = "1234";
int i;
stringstream ss;
ss << s;//ss流進s
ss >> i;// ss流出到i
cout << i;
return 0;
}
數字轉字符串
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <sstream>
using namespace std;
int main()
{
int a = 1234;
string out;
stringstream ss;
ss << a;
ss >> out;
cout << out;
return 0;
}
五、queue用法
//先進先出
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
q.push(5);
q.push(6);
cout << q.front() << endl;
q.pop();
cout << q.front() << endl;
cout << q.size();
return 0;
}
六、map用法
//map底層是樹狀結構,有序
// unordered_map底層是哈希結構,無序
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
map<int, int> m;
m[6] = 3;
m[5] = 8;
m[4] = 9;
map<int, int> :: iterator i;
for (i = m.begin(); i != m.end(); i++)
{
cout << i -> first << " " << i -> second << endl;
}
return 0;
}
七、set用法
set是一個集合,不允許有重複元素
set底層是一個樹狀結構,有序
unordered_set 哈希結構,無序,快
//set是一個集合,不允許有重複元素
//set底層是一個樹狀結構,有序
//unordered_set 哈希結構,無序,快
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
set<int> s;
s.insert(3);
s.insert(4);
s.insert(4);
s.insert(4);
cout << s.size() << endl;
set<int> :: iterator i;
for (i = s.begin(); i != s.end(); i++) cout << *i << " ";
return 0;
}
八、dequeue用法
deque是一個雙端隊列,頭和尾都可以操作
可以進行排序
//deque是一個雙端隊列,頭和尾都可以操作
//可以進行排序
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;
int main()
{
deque<int> d;
d.push_back(1);
d.push_back(2);
d.push_front(9);
d.push_front(4);
deque<int> :: iterator i;
for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
cout << endl;
//排序
sort(d.begin(), d.end(), greater<int>());
for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
cout << endl;
d.pop_back();
d.pop_front();
for (i = d.begin(); i != d.end(); i++) cout << *i << " ";
return 0;
}
九、list用法
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
list<int> li;
li.push_back(6);
li.push_back(5);
li.insert(++ li.begin(), 2);
list<int> :: iterator i;
for (i = li.begin(); i != li.end(); i++) cout << *i << " ";
return 0;
}