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

提供: C++入門
移動: 案内検索
(概要)
行1: 行1:
[[std::vector::vector]]は、[[std::vector]] のコンストラクタです。[[std::vector]]の初期化をします。
+
[[std::vector::vector]]は、[[C++]]の[[STL]] [[コンテナ]]の[[std::vector]]の[[コンストラクタ]]です。[[std::vector]]の初期化をします。
  
 
__TOC__
 
__TOC__
行18: 行18:
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
//default (1)
 
//default (1)
 
 
explicit vector (const allocator_type& alloc = allocator_type());
 
explicit vector (const allocator_type& alloc = allocator_type());
  
 
//fill (2)
 
//fill (2)
 
 
explicit vector (size_type n);
 
explicit vector (size_type n);
 
         vector (size_type n, const value_type& val,
 
         vector (size_type n, const value_type& val,
行28: 行26:
  
 
//range (3)
 
//range (3)
 
 
template <class InputIterator>
 
template <class InputIterator>
 
   vector (InputIterator first, InputIterator last,
 
   vector (InputIterator first, InputIterator last,
行34: 行31:
  
 
//copy (4)
 
//copy (4)
 
 
vector (const vector& x);
 
vector (const vector& x);
 
vector (const vector& x, const allocator_type& alloc);
 
vector (const vector& x, const allocator_type& alloc);
  
 
//move (5)
 
//move (5)
 
 
vector (vector&& x);
 
vector (vector&& x);
 
vector (vector&& x, const allocator_type& alloc);
 
vector (vector&& x, const allocator_type& alloc);
  
 
//initializer list (6)
 
//initializer list (6)
 
 
vector (initializer_list<value_type> il,
 
vector (initializer_list<value_type> il,
 
       const allocator_type& alloc = allocator_type());
 
       const allocator_type& alloc = allocator_type());
行50: 行44:
  
 
== 初期化リストで初期化する ==
 
== 初期化リストで初期化する ==
[[C++11]]では、[[std::initializer_list]]が実装され、初期化リストでコンテナが初期化できるようになりました。
+
[[C++11]]では、[[std::initializer_list]]が実装され、初期化リストで[[コンテナ]]が初期化できるようになりました。
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
 
vector<int> v{1,2,3};
 
vector<int> v{1,2,3};
行249: 行243:
 
* [[std::vector::assign]]
 
* [[std::vector::assign]]
 
* [[BOOST_FOREACH]]
 
* [[BOOST_FOREACH]]
 +
* [[コンテナ]]
 
{{vector}}
 
{{vector}}
 +
* [[配列]]
 
<!-- vim: filetype=mediawiki -->
 
<!-- vim: filetype=mediawiki -->

2014年1月4日 (土) 01:45時点における版

std::vector::vectorは、C++STL コンテナstd::vectorコンストラクタです。std::vectorの初期化をします。

概要

std::vector::vector は、std::vectorのコンストラクタです。std::vector::vector の使い方をいくつか示します。 C++11では、コンテナの初期化もできるようになりました。

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());

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

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 シンプルな例をご参照ください。

初期化リストでの初期化の例

ソースコード auto2.cpp

#include <iostream>
#include <vector>
using namespace std;
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v{1,2,3};
        for (auto x: v) {
                cout << x << endl;
        }
        return 0;
}

コンパイル

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

実行例

% ./auto2
1
2
3

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

関連項目

std::vector
メンバ 意味
constructor vectorのコンストラクタ。vectorを初期化します。
destrctor デストラクタ
operator= operator=
reserve std::vectorのキャパシティを予約します。
capacity 割り当てられているストレージキャパシティのサイズを返します。
size サイズを返します。
resize サイズをリサイズします。
shrink_to_fit コンテナのキャパシティにフィットしたサイズまで縮小します。
push_back std::vector の最後に新しい要素を追加します。要素は、コピー、もしくは、move されます。
std::vector の最後の要素を取り除きます。コンテナのサイズが1つ小さくなります。
insert std::vector に新しい要素を追加します。vector同士を連結できます。
erase std::vector の1つの要素、または、要素のレンジを削除します。
clear std::vector の要素をすべて削除します。
empty std::vector が空であれば、trueを返し、そうでなければ、falseです。
begin std::vector の最初の要素のイテレータを返します。
front std::vector の最初の要素の参照を返します。
back std::vector の最後の要素の参照を返します。
at std::vector の n 番目の要素の参照を返します。無効な要素にアクセスしたとき、 std::out_of_range の例外を送出します。 operator[] は、境界チェックをしません。
operator[] std::vector の n 番目の要素の参照を返します。 operator[] は、境界チェックをしません。
std::vector::shrink_to_fit C++11で追加された、コンテナサイズを領域に合わせます。メモリの解放に利用します。