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番目の指が末尾の要素を指す次の要素に注意
以下に例を示します.
<!--
.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()は、コンテナの最後の要素を指す反復器を返す
反復の使用
反復器:反復器はいわゆるスマートポインタで、複雑なデータ構造を遍歴する能力を持っています.容器の専用ポインタと見なしましょう.容器を使うときは一般的にこれを使います.配列インデックスを使う方法はかえって少なくなります.次は簡単な反復器を使う例です.
<!--
.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配列の定義
<!--
.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ダイナミック配列の定義
<!--
.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; }
-->
基本概念
vectorコンテナはテンプレートクラスで、任意のタイプのオブジェクトを格納できます).vectorオブジェクトは、実行時に効率的に要素を追加でき、vector内の要素は連続的に格納されます.
1、定義と初期化
*vector<タイプ名>識別子(n)//コンテナサイズをnに定義
*vector<タイプ名>識別子(最大容量、初期すべての値);
eg: vector< int > ivec( 10, -1 ); ivecを定義します.int型の要素が10個含まれています.各要素は-1に初期化されます.
*vector<タイプ名>vector
//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にコピーするvector
//3要素a[2],a[3],a[4]vector
以下に例を示します.
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; }
-->