7 14 vector 南陽理工測評的資料結構題

2021-08-03 20:20:04 字數 3684 閱讀 2874

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個蘋果到地面的高度,以及小明把手伸直的時候能夠達到的最大高度,請幫小明算一下她能夠摘到的蘋果的數目。假設...