「std::vector::vector」の版間の差分

提供: C++入門
移動: 案内検索
(関連項目)
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
 
[[std::vector]] のコンストラクタについて。
 
[[std::vector]] のコンストラクタについて。
  
行8: 行4:
  
 
== 概要 ==
 
== 概要 ==
 
 
[[std::vector::vector]] は、[[std::vector]]のコンストラクタです。
 
[[std::vector::vector]] は、[[std::vector]]のコンストラクタです。
 
[[std::vector::vector]] の使い方をいくつか示します。
 
[[std::vector::vector]] の使い方をいくつか示します。
  
[[C++11]]
+
[[C++11]]の場合
  
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
行48: 行43:
  
 
== std::vectorをコンストラクタで初期化する例 ==
 
== std::vectorをコンストラクタで初期化する例 ==
 
 
=== ソースコード vector_constructor_1.cpp ===
 
=== ソースコード vector_constructor_1.cpp ===
 
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
#include <iostream>
 
#include <iostream>
行75: 行68:
  
 
=== コンパイル ===
 
=== コンパイル ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
g++  -I/usr/local/include vector_constructor_1.cpp -o vector_constructor_1
 
g++  -I/usr/local/include vector_constructor_1.cpp -o vector_constructor_1
行81: 行73:
  
 
=== 実行例 ===
 
=== 実行例 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ./vector_constructor_1
 
% ./vector_constructor_1
行88: 行79:
 
100
 
100
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
== イテレータを使用した初期化の例 ==
 
== イテレータを使用した初期化の例 ==
 
 
=== ソースコード vector_constructor_2.cpp ===
 
=== ソースコード vector_constructor_2.cpp ===
 
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
#include <iostream>
 
#include <iostream>
行118: 行106:
  
 
=== コンパイル ===
 
=== コンパイル ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
g++  -I/usr/local/include vector_constructor_2.cpp -o vector_constructor_2
 
g++  -I/usr/local/include vector_constructor_2.cpp -o vector_constructor_2
行124: 行111:
  
 
=== 実行例 ===
 
=== 実行例 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ./vector_constructor_2
 
% ./vector_constructor_2
行133: 行119:
  
 
== ほかのstd::vectorをコンストラクタでコピーする例 ==
 
== ほかのstd::vectorをコンストラクタでコピーする例 ==
 
 
=== ソースコード vector_constructor_3.cpp ===
 
=== ソースコード vector_constructor_3.cpp ===
 
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
#include <iostream>
 
#include <iostream>
行161: 行145:
  
 
=== コンパイル ===
 
=== コンパイル ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
g++  -I/usr/local/include vector_constructor_3.cpp -o vector_constructor_3
 
g++  -I/usr/local/include vector_constructor_3.cpp -o vector_constructor_3
行167: 行150:
  
 
=== 実行例 ===
 
=== 実行例 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ./vector_constructor_3
 
% ./vector_constructor_3
行176: 行158:
  
 
== 配列を利用した初期化の例 ==
 
== 配列を利用した初期化の例 ==
 
 
=== ソースコード vector_constructor_4.cpp ===
 
=== ソースコード vector_constructor_4.cpp ===
 
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
#include <iostream>
 
#include <iostream>
行209: 行189:
  
 
=== 実行例 ===
 
=== 実行例 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ./vector_constructor_4
 
% ./vector_constructor_4
行216: 行195:
 
3
 
3
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 初期化リストで初期化する ==
 +
[[C++11]]では、[[std::initializer_list]]が実装され、初期化リストでコンテナが初期化できるようになりました。
 +
<syntaxhighlight lang="cpp">
 +
vector<int> v{1,2,3};
 +
</syntaxhighlight>
 +
このコードをコンパイルするには、[[C++11]]に対応した[[g++]]などのコンパイラが必要です。
 +
コンパイルする場合には、-std=c++11などのオプションが必要です。
 +
<syntaxhighlight lang="bash">
 +
g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
 +
-Wl,-rpath=/usr/local/lib/gcc49  vector_for_int.cpp -o vector_for_int
 +
</syntaxhighlight>
 +
詳細については、[[std::vector シンプルな例]]をご参照ください。
  
 
== 関連項目 ==
 
== 関連項目 ==
行224: 行216:
 
* [[for]]
 
* [[for]]
 
* [[auto]]
 
* [[auto]]
 +
<!-- vim: filetype=mediawiki -->

2013年12月28日 (土) 01:05時点における版

std::vector のコンストラクタについて。

概要

std::vector::vector は、std::vectorのコンストラクタです。 std::vector::vector の使い方をいくつか示します。

C++11の場合

//default (1)	
 
explicit vector (const allocator_type& alloc = allocator_type());
 
//fill (2)	
 
explicit vector (size_type n);
         vector (size_type n, const value_type& val,
                 const allocator_type& alloc = allocator_type());
 
//range (3)	
 
template <class InputIterator>
  vector (InputIterator first, InputIterator last,
          const allocator_type& alloc = allocator_type());
 
//copy (4)	
 
vector (const vector& x);
vector (const vector& x, const allocator_type& alloc);
 
//move (5)	
 
vector (vector&& x);
vector (vector&& x, const allocator_type& alloc);
 
//initializer list (6)	
 
vector (initializer_list<value_type> il,
       const allocator_type& alloc = allocator_type());

std::vectorをコンストラクタで初期化する例

ソースコード vector_constructor_1.cpp

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
using namespace std;
void
dump (vector<int> &v) {
        BOOST_FOREACH(int x, v) {
                cout << x << endl;
        }
}
 
int
main(int argc, char const* argv[])
{
 
        vector<int>     v(3, 100);
        dump (v);
 
        return 0;
}

コンパイル

g++  -I/usr/local/include vector_constructor_1.cpp -o vector_constructor_1

実行例

% ./vector_constructor_1
100
100
100

イテレータを使用した初期化の例

ソースコード vector_constructor_2.cpp

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
using namespace std;
void
dump (vector<int> &v) {
        BOOST_FOREACH(int x, v) {
                cout << x << endl;
        }
}
 
int
main(int argc, char const* argv[])
{
        vector<int>     v1(3, 100);
        vector<int>     v2(v1.begin(), v1.end());
        dump (v2);
 
        return 0;
}

コンパイル

g++  -I/usr/local/include vector_constructor_2.cpp -o vector_constructor_2

実行例

% ./vector_constructor_2
100
100
100

ほかのstd::vectorをコンストラクタでコピーする例

ソースコード vector_constructor_3.cpp

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
using namespace std;
void
dump (vector<int> &v) {
        BOOST_FOREACH(int x, v) {
                cout << x << endl;
        }
}
 
int
main(int argc, char const* argv[])
{
 
        vector<int>     v1(3, 100);
        vector<int>     v2(v1);
        dump (v2);
 
        return 0;
}

コンパイル

g++  -I/usr/local/include vector_constructor_3.cpp -o vector_constructor_3

実行例

% ./vector_constructor_3
100
100
100

配列を利用した初期化の例

ソースコード vector_constructor_4.cpp

#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
using namespace std;
void
dump (vector<int> &v) {
        BOOST_FOREACH(int x, v) {
                cout << x << endl;
        }
}
 
int
main(int argc, char const* argv[])
{
        int     array[] = {1,2,3};
        vector<int>     v(array, array + (sizeof(array)/sizeof(int)) );
        dump (v);
 
        return 0;
}

コンパイル

g++  -I/usr/local/include vector_constructor_4.cpp -o vector_constructor_4

実行例

% ./vector_constructor_4
1
2
3

初期化リストで初期化する

C++11では、std::initializer_listが実装され、初期化リストでコンテナが初期化できるようになりました。

vector<int> v{1,2,3};

このコードをコンパイルするには、C++11に対応したg++などのコンパイラが必要です。 コンパイルする場合には、-std=c++11などのオプションが必要です。

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  vector_for_int.cpp -o vector_for_int

詳細については、std::vector シンプルな例をご参照ください。

関連項目