pandas 儲存csv_Pandas學習之旅:to_csv()缺失處理
技術標籤:總結
S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) \mathcal{STL}(\mathcal{Standard\ Template\ Library}) STL(StandardTemplateLibrary)
-
q u e u e queue queue (佇列):
這是一種先進先出的資料結構,主要操作有
操作 功能 f r o n t ( ) front() front() 返回隊尾元素的值 p o p ( ) pop() pop() 彈出隊頭元素 p u s h ( x ) push(x) pu 將 x x x 壓入隊尾 e m p t y ( ) empty() empty() 如果佇列為空,返回 t r u e true true s i z e ( ) size() size() 返回當前佇列內元素個數 海港 O J \mathcal{OJ} OJ
這道題主要思路是用一個佇列維護時間,再用一個佇列記錄這個人的國籍
程式碼:
#include <queue> #include <cstdio> using namespace std; const int TIME = 86400; int n, Countries_, t, k, x, f[ 100005 ]
-
s t a c k ( stack( stack(棧 ) ) ):
在我看來,棧與佇列相當於孿生兄弟,但是佇列 p o p ( ) pop() pop() 彈出隊頭元素,先進先出;棧 p o p ( ) pop() pop() 彈出棧頂元素,先進後出
主要操作:
操作 功能 t o p ( ) top() top() 返回棧頂元素的值 p o p ( ) pop() pop() 彈出棧頂元素 p u s h ( x ) push(x) push(x) 將 x x x 壓入棧頂 e m p t y ( ) empty() empty() 如果棧頂元素為空,返回 t r u e true true s i z e ( ) size() size() 返回當前棧內元素個數 例題 表示式括號匹配 O J \mathcal{OJ} OJ
思路:如果當前第i位是右括號, 則判斷如果前面有左括號且並未用過。若有,將其彈出棧,否則直接輸出 N O NO NO
程式碼:#include <stack> #include <cstdio> using namespace std; stack <char> s; int n; char c; int main () { while (scanf ("%c", &c) != EOF && c != '@') { if (c == '(') {//如果c是左括號,將其push進棧,以便於後面判斷 s.push(c); } else if (c == ')') { if (s.empty() == true) {//如果棧為空,即前方無可用左括號,則輸出"NO" puts("NO"); return 0; } s.pop();//若有可用左括號,將左括號彈出,當成已用過 } } if (s.empty() == true) {//如果左括號用完,輸出"YES" puts("YES"); return 0; } puts("NO"); return 0; }
-
v e c t o r vector vector(順序容器,不定長陣列):
和陣列差不多,但比陣列優越。特徵是相當於可分配拓展的陣列。它的隨機訪問、在末端插入和刪除快,但在中間插入和刪除慢。主要操作:
操作 功能 p u s h _ b a c k ( x ) push\_back(x) push_back(x) 在 v e c t o r vector vector 的末尾插入變數 x x x p o p pop pop_ b a c k ( ) back() back() 去掉 v e c t o r vector vector 的末尾資料 f r o n t ( ) front() front() 返回 v e c t o r vector vector 第一個元素 b e g i n ( ) begin() begin() 返回 v e c t o r vector vector 頭的指標 e n d ( ) end() end() 返回 v e c t o r vector vector 最後一個單元 + 1 +1 +1 的指標 c l e a r ( ) clear() clear() 清除 v e c t o r vector vector 所有資料 e m p t y ( ) empty() empty() 如果 v e c t o r vector vector 為空,返回 t r u e true true e r a s e ( t ) erase(t) erase(t) 刪除t位置的資料 e r a s e ( B e g i n , E n d ) erase(Begin, End) erase(Begin,End) 刪除 [ B e g i n , E n d ) [Begin, End) [Begin,End) 區間的資料 s i z e ( ) size() size() 返回當前 v e c t o r vector vector中資料個數 i n s e r t ( t , d a t a ) insert(t, data) insert(t,data) 在t處插入資料 d a t a data data
-
m a p map map(關聯容器、有序無重複):
它提供一對一(其中第一個稱為關鍵字,每個關鍵字只在 m a p map map 中出現一次,第二個稱為該關鍵字的值)的資料處理能力注意:
- m a p map map 內部所有的資料都是有序的(紅黑樹)
- 對於迭代器來說,可以修改實值,但不能修改 k e y key key。
例題 詞典 O J \mathcal{OJ} OJ
程式碼:#include <map> #include <cstdio> #include <iostream> using namespace std; map <string, string> Dictionary; string s, s2; char a[ 155 ], b[ 155 ]; int main () { while (getline(cin, s, '\n')) { if (s == "") { break; } sscanf(s.c_str(), "%s %s", a, b); Dictionary[ b ] = a; } while (cin >> s) { if (Dictionary[ s ] == "\0") { puts("eh"); } else { cout << Dictionary[ s ] << endl; } } return 0; }
-
s e t set set(關聯容器,集合):
s e t set set是“集合”的意思, s e t set set 中元素都是唯一的,預設情況下會對元素自動進行升序排列,如果需要集合中的元素允許重複那麼可以使用 m u l t i s e t multiset multiset。
主要操作:
操作 功能 b e g i n ( ) begin() begin() 返回 s e t set set 中的第一個元素 e n d ( ) end() end() 返回 s e t set set 中的最後一個元素 c l e a r ( ) clear() clear() 刪除 s e t set set 中的所有資料 e m p t y ( ) empty() empty() 如果 s e t set set 為空,返回 t r u e true true i n s e r t ( ) insert() insert() 插入一個元素 e r a s e ( ) erase() erase() 刪除一個元素 s i z e ( ) size() size() 返回當前 s e t set set中元素個數 c o u n t ( ) count() count() 返回 s e t set set中某個值元素的個數 f i n d ( ) find() find() 返回一個指向被查詢到元素的迭代器 l o w e r _ b o u n d ( ) lower\_bound() lower_bound() 返回指向第一個 ≥ \geq ≥ 某個值的元素的迭代器 u p p e r _ b o u n d ( ) upper\_bound() upper_bound() 返回第一個>某個值的元素的迭代器 提示:若想讓 s e t set set 以降序排序,可使用 s e t < i n t , g r e a t e r < i n t > > set<int,\ greater\ < int >\ > set<int,greater<int>>
-
p r i o r i t y _ q u e u e priority\_queue priority_queue(優先佇列)
定義:任何時刻,隊首元素一定是當前佇列中優先順序最高(優先值最大)的那一個(大根堆),也可以是最小的那一個(小根堆),可以不斷向優先佇列中新增某個優先順序的元素,也可以不斷彈出優先順序最高的元素,每次操作會自動調整結構,始終保證隊首元素的優先順序最高。(
懵逼)主要操作:
操作 功能 時間複雜度 p u s h ( ) push() push() 將 x x x 加入優先佇列 O ( l o g 2 n ) , n O(log_2{n}),n O(log2n),n 為元素個數 p o p ( ) pop() pop() 隊首元素出隊 O ( l o g 2 n ) , n O(log_2{n}),n O(log2n),n 為元素個數 t o p ( ) top() top() 獲得隊首元素 O ( 1 ) O(1) O(1) e m p t y ( ) empty() empty() 如果優先佇列為空,返回 t r u e true true O ( 1 ) O(1) O(1) s i z e ( ) size() size() 返回 p r i o r i t y _ q u e u e priority\_queue priority_queue 內元素的個數 O ( 1 ) O(1) O(1) 重點:
p r i o r i t y _ q u e u e < i n t > q < = > p r i o r i t y _ q u e u e < i n t , v e c t o r < i n t > , l e s s < i n t > > q priority\_queue<int>\ q\ <=>\ priority\_queue<int,\ vector<int>,\ less<int>\ >\ q priority_queue<int>q<=>priority_queue<int,vector<int>,less<int>>q (升序)
p r i o r i t y _ q u e u e < i n t , v e c t o r < i n t > , g r e a t e r < i n t > > q priority\_queue<int,\ vector<int>,\ greater<int>\ >\ q priority_queue<int,vector<int>,greater<int>>q (降序)例題 合併果子 O J \mathcal{OJ} OJ
程式碼:
#include <cstdio> #include <queue> #include <vector> using namespace std; priority_queue <int,vector<int>,greater<int> > q;//升序 int n, a, tot; int main () { scanf ("%d", &n); for (int i = 1; i <= n; i ++) { scanf ("%d", &a); q.push (a); } for (int i = 1; i < n; i ++) {//貪心 int x = q.top (); q.pop (); x += q.top (); q.pop (); q.push (x); tot += x; } printf ("%d\n", tot); return 0; }