vector
array;
array.push_back(1);
array.push_back(6);
array.push_back(3);
array.push_back(6);
array.push_back(6);
array.push_back(2);
vector
::iterator itor;
for(itor=array.begin();itor!=array.end();)
else
} for(itor=array.begin();itor!=array.end();itor++)
cout<<(*itor)<
c++ vector的用法:
(向量) 一種資料結構 相當於動態的陣列 當我們無法知道自己需要的陣列規模多大的時候 用來解決問題可以達到最大節約空間的目的
個人總結:
1.標頭檔案#include
2.建立vector物件 vectorvec (像建立佇列棧一樣) 等於宣告了乙個int的陣列vec大小沒有制定 可以動態向裡面新增或刪除
如果想要宣告乙個二維陣列的話 vectora 三維的話vectora
4.具體用法和呼叫
例如:vecotra;
int b=5;
a.push_back(b);
coutpop_back:去掉陣列最後乙個資料
at:得到編號位置的資料
begin:得到陣列頭的指標
end:得到最後乙個單元+1的指標
front:得到陣列頭的引用
back:得到最後乙個單元的引用
max_size:vector最大可以是多少
capacity:當前vector分配的大小
size:當前資料的大小
empty:判斷是否為空
swap :與另外的vector交換資料
具體應用:
c.erase(pos):刪除pos位置的資料 返回pos+1的位置
c.erase(beg,end):刪除beg到end的資料 刪除後會往前移動嗎//使用時候注意 這裡涉及到迭代器 iterator 返回的是end+1的位置
迭代器iterator:是一種檢查容器內元素並且遍歷元素的資料型別 又稱為「游標模式」 提供一種方法訪問容器
例如:vectorarray;
array.push_back(1);
array.push_back(6);
array.push_back(3);
array.push_back(6);
array.push_back(6);
array.push_back(2);
vector::iterator itor;
for(itor=array.begin();itor!=array.end();)
else
} for(itor=array.begin();itor!=array.end();itor++)
cout<<(*itor)《所以用erase就要用到迭代器去遍歷 然後才可以向前移動
利用erase刪除區間的問題還有待解決
c.insert(pos,elem):複製elem到pos的位置上
可以嘗試用vector陣列來解決約瑟夫環的問題
//用vector陣列來解決約瑟夫環 poj 3750
#include
#include
#include
using namespace std;
int main()
int w,s;
char a;
cin>>w>>a>>s;
int k=1;
vector::iterator ite;
for(ite=c.begin()+w;ite!=c.end();)
else ite++;
if(ite>=c.end())
ite=c.begin();
}system("pause");
return 0;}
上面這裡沒有直接vector而是vector來刪除已經輸出的下標
遍歷有下標法和迭代器法
討論一下用vectorstring char*的效能差別
總結一下stl:標準模板庫,重要特點是資料結構和演算法的分離,六大元件:容器 迭代器 演算法 仿函式 迭代介面卡 空間制配器
錯誤解法:
#include
#include
using namespace std;
int main()
else if(fuhao.top()!='(')
else fuhao.pop();
} else if(a==']')
else if(fuhao.top()!='[')
else fuhao.pop();
}}while(a!='\n');
if(flag==true)
cout<<"yes"0)
fuhao.pop();
}system("pause");
return 0;
}這裡錯在 因為我是一行的輸入進去 都在緩衝區 當我識別到乙個錯誤的時候 break出來 雖然我把棧裡面的東西都pop掉 但是我緩衝區還有東西
還有乙個問題是 識別不了最後的換行符號 即a!=0這裡
解決方法 1清空緩衝區
#include
#include
using namespace std;
int main()
else if(fuhao.top()!='(')
else fuhao.pop();
} else if(a==']')
else if(fuhao.top()!='[')
else fuhao.pop();
}cin.get(a);
}if(flag==true)
cout<<"yes"0)
fuhao.pop();
}system("pause");
return 0;
}問題都解決了 資料都過了 但是還沒能ac???
有可能錯在資料的長度問題 網上搜尋的答案是用陣列來做的
嘗試一下
#include
#include
#include
using namespace std;
int main()
else if(fuhao.top()!='(')
else fuhao.pop();
}else if(f[i]==']')
else if(fuhao.top()!='[')
else fuhao.pop();
}}while(fuhao.size()>0)
fuhao.pop();
} if(flag==true)
cout<<"yes"< else cout<<"no"《這個是ac的答案
反思總結:
那種有告訴字串長度的 一般都放在陣列中 然後用strlen裡計算長度就可以乙個個地用 要包含標頭檔案string.h
然後這裡乙個小技巧 配對問題一定會是雙數 所以一開始判斷出單數就可以直接false break
國王的魔鏡 南陽理工
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述國王有乙個魔鏡,可以把任何接觸鏡面的東西變成原來的兩倍 只是,因為是鏡子嘛,增加的那部分是反的。比如一條項鍊,我們用ab來表示,不同的字母表示不同顏色的珍珠。如果把b端接觸鏡面的話,魔鏡會把這條項鍊變為abba。如果再用一端接觸的...
南陽理工 105九的餘數
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在給你乙個自然數n,它的位數小於等於一百萬,現在你要做的就是求出這個數整除九之後的餘數。輸入 第一行有乙個整數m 1 m 8 表示有m組測試資料 隨後m行每行有乙個自然數n。輸出輸出n整除九之後的餘數,每次輸出佔一行。樣例輸入...
南陽理工acm,摘蘋果的小明
描述 小明家的院子裡有一棵蘋果樹,每到秋天樹上就會結出10個蘋果。蘋果成熟的時候,小明就會跑去摘蘋果。小明有個30厘公尺高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。現在已知10個蘋果到地面的高度,以及小明把手伸直的時候能夠達到的最大高度,請幫小明算一下她能夠摘到的蘋果的數目。假設...