C++ 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;
}

在這裏插入圖片描述

十、文檔

1.英文
2.中文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章