C++におけるvectorの基本的な使い方

22683 ワード

//ネットで長い間見ていたので、自分でまとめてみました.
基本概念
vectorコンテナはテンプレートクラスで、任意のタイプのオブジェクトを格納できます).vectorオブジェクトは、実行時に効率的に要素を追加でき、vector内の要素は連続的に格納されます.
1、定義と初期化
*vector<タイプ名>識別子(n)//コンテナサイズをnに定義
*vector<タイプ名>識別子(最大容量、初期すべての値);
eg: vector< int > ivec( 10, -1 ); ivecを定義します.int型の要素が10個含まれています.各要素は-1に初期化されます.
*vector<タイプ名>vectorv 2(v 1);またはv 2=v 1;またはvectorv 2(v 1.begin()v 1.end());
//v 2はv 1のコピーで、v 1の場合.size()>v 2.size()は、付与後v 2.size()はv 1に拡張する.size().
*コピー配列の要素:int a[6]={-2,-1,0,1,2,1024};
//iaの6つの要素をivecにコピーするvectorivec(a,a+6);
//3要素a[2],a[3],a[4]vectorivec(&a[2],&a[5]);//2番目の指が末尾の要素を指す次の要素に注意
以下に例を示します.
 1 #include<iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main(){
 5     int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
 6     //        
 7     vector< int > vec1( a, a+6 );  
 8     cout<<vec1[0]<<' '<<vec1[1]<<' '<<vec1[2]<<' '<<vec1[3]<<endl;
 9 
10     //        
11     //
12     vector< int > vec( &a[ 2 ], &a[5] );
13     cout<<vec[0]<<' '<<vec[1]<<' '<<vec[2]<<' '<<vec[3]<<endl;  //vec[3]    ,     
14     
15     // vec          
16     vector< int > newone;
17     newone = vec;
18     cout<<newone[0]<<endl;
19     return 0;
20 }

 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
一般的な方法
c.clear()コンテナ内のすべてのデータを除去します.
c.empty()容器が空であるか否かを判断する.
c.erase(pos)pos位置のデータを削除
c.erase(beg,end)[beg,end)区間のデータを削除
c.front()は最初のデータを返します.
c.insert(pos,elem)pos位置にelemコピーを挿入
c.pop_back()最後のデータを削除します.
c.push_back(elem)は、末尾にデータを追加します.
c.resize(num)容器の大きさを再設定する
c.size()は、コンテナ内の実際のデータの数を返します.
c.begin()は、コンテナの最初の要素を指す反復器を返す
c.end()は、コンテナの最後の要素を指す反復器を返す
反復の使用
反復器:反復器はいわゆるスマートポインタで、複雑なデータ構造を遍歴する能力を持っています.容器の専用ポインタと見なしましょう.容器を使うときは一般的にこれを使います.配列インデックスを使う方法はかえって少なくなります.次は簡単な反復器を使う例です.
 1 //               
 2 #include<iostream>
 3 #include<vector>
 4 using namespace std;
 5 int main(){
 6     vector<int> abc;
 7     abc.push_back(1);       //push     
 8     abc.push_back(5);
 9     abc.push_back(3);        
10     abc.push_back(4);
11      
12      //          
13     for(vector<int>::iterator it = abc.begin();it!=abc.end();)
14     {
15         if(*it ==4)
16             it = abc.erase(it);
17         else
18             ++it;
19     }
20     cout << "After remove 5:
"; 21 for(vector<int>::iterator i = abc.begin(); i < abc.end(); ++i) 22 { 23 cout << * i << " "; 24 } 25 cout << endl; 26 return 0; 27 }

 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
以下に簡単なプログラムを示します.
2 D配列の定義
 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main(){
 5     int i = 0,j = 0;    //        
 6     //Array   10 ,   0
 7     vector< vector<int> > Array(10,vector<int>(0));
 8 
 9     for(j = 0; j < 10; j++)
10     {
11         for (i = 0; i < 9; i++)
12             {
13                 Array[j].push_back(i);
14              }
15     }
16   //  
17     for( j = 0; j < 10; j++ )
18     {
19         for(i = 0; i<Array[j].size(); i++)
20         {
21             cout << Array[j][i] << " ";
22         }
23             cout<< endl;
24     }
25 }

 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
並べ替えと逆
 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 #include <cstdlib>
 5 using namespace std;
 6 int main(){
 7     vector<int>  num;
 8     int element;
 9     while(cin>>element)
10         num.push_back(element);
11 
12     sort(num.begin(),num.end());             //      
13     
14     reverse(num.begin(),num.end());          //    
15 
16     for(int i = 0;i<num.size();i++)
17         cout<<num[i]<<endl;
18 
19     system("pause");
20         return 0;
21 }

 
2 Dダイナミック配列の定義
 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main(){
 5     int i = 0,j = 0;
 6     vector<vector<int> >  Array;
 7     vector<int>  line;
 8     for(j = 0;j < 20;j++){
 9         Array.push_back(line);     //     vector   ,    。
10         for (i = 0; i < 9; i++ )
11          {
12             Array[ j ].push_back( i );
13         }
14     }
15 
16     for(j = 0;j < 10;j++ )
17     {
18          for(i = 0; i<Array[j].size(); i++)
19         {
20             cout << Array[j][i] << " ";
21         }
22          cout<< endl;
23     }
24 }

 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
参照:http://blog.csdn.net/xiaohuizi2009/article/details/8067667
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->