名前空間
変種
操作

std::list::list

提供: cppreference.com
< cpp‎ | container‎ | list
list();
explicit list( const Allocator& alloc );
(1)
(2)
explicit list( size_type count,

               const T& value = T(),

               const Allocator& alloc = Allocator());
(C++11以前)
         list( size_type count,

               const T& value,

               const Allocator& alloc = Allocator());
(C++11およびそれ以降)
(3)
explicit list( size_type count );
(C++11およびそれ以降)
(C++14以前)
explicit list( size_type count, const Allocator& alloc = Allocator() );
(C++14およびそれ以降)
template< class InputIt >

list( InputIt first, InputIt last,

      const Allocator& alloc = Allocator() );
(4)
list( const list& other );
(5)
list( const list& other, const Allocator& alloc );
(5) (C++11およびそれ以降)
list( list&& other );
(6) (C++11およびそれ以降)
list( list&& other, const Allocator& alloc );
(7) (C++11およびそれ以降)
list( std::initializer_list<T> init,
      const Allocator& alloc = Allocator() );
(8) (C++11およびそれ以降)

オプションでユーザ提供されたアロケータ alloc を使用して、様々なデータソースから新しいコンテナを構築します。

1) デフォルトコンストラクタ。 空のコンテナを構築します。 アロケータが提供されない場合はデフォルト構築されたインスタンスから取得されます。
2)value を持つ要素の count 個のコピーを持つコンテナを構築します。
3) デフォルト挿入された count 個の T のインスタンスを持つコンテナを構築します。 コピーは行われません。
4) 範囲 [first, last) の内容を持つコンテナを構築します。
このコンストラクタは、InputIt が整数型の場合、 list(static_cast<size_type>(first), static_cast<value_type>(last), a) と同じ効果を持ちます。 (C++11以前)
オーバーロード (2) との曖昧さを避けるため、このオーバーロードは、InputItInputIteratorを満たす場合にのみ、オーバーロード解決に参加します。 (C++11およびそれ以降)
5) コピーコンストラクタ。 other の内容のコピーを持つコンテナを構築します。 alloc が提供されない場合、アロケータは std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()) を呼んだかのように取得されます。
6) ムーブコンストラクタ。 ムーブセマンティクスを用いて other の内容を持つコンテナを構築します。 アロケータは other の持つアロケータからムーブ構築によって取得されます。
7) アロケータ拡張ムーブコンストラクタ。 新しいコンテナのためのアロケータとして alloc を使用し、 other から内容をムーブします。 alloc != other.get_allocator() の場合は要素単位のムーブになります。
8) 初期化子リスト init の内容を持つコンテナを構築します。

目次

[編集] 引数

alloc - このコンテナのすべてのメモリ確保に使用されるアロケータ
count - コンテナのサイズ
value - コンテナの要素を初期化する値
first, last - 要素をコピーする範囲
other - コンテナの要素を初期化するためのソースとして使用される別のコンテナ
init - コンテナの要素を初期化するための初期化子リスト

[編集] 計算量

1) 一定。
2-3) count に比例。
4) firstlast の距離に比例。
5) other のサイズに比例。
6) 一定。
7) alloc != other.get_allocator() の場合は比例、そうでなければ一定。
8) init のサイズに比例。

[編集] 例外

Allocator::allocate の呼び出しは例外を投げるかもしれません。

[編集] ノート

コンテナのムーブ構築 (オーバーロード (6)) の後、 other を指す参照、ポインタ、イテレータ (終端イテレータは除く) は有効なまま残りますが、以後 *this 内の要素を指すようになります。 現行の標準ではこの保証は §23.2.1[container.requirements.general]/12 の包括的な文言によってなされていますが、より直接的な保証が LWG 2321 で検討されています。


[編集]

#include <list>
#include <string>
#include <iostream>
 
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::list<T>& v) {
    s.put('[');
    char comma[3] = {'\0', ' ', '\0'};
    for (const auto& e : v) {
        s << comma << e;
        comma[0] = ',';
    }
    return s << ']';
}
 
int main() 
{
    // c++11 initializer list syntax:
    std::list<std::string> words1 {"the", "frogurt", "is", "also", "cursed"};
    std::cout << "words1: " << words1 << '\n';
 
    // words2 == words1
    std::list<std::string> words2(words1.begin(), words1.end());
    std::cout << "words2: " << words2 << '\n';
 
    // words3 == words1
    std::list<std::string> words3(words1);
    std::cout << "words3: " << words3 << '\n';
 
    // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}
    std::list<std::string> words4(5, "Mo");
    std::cout << "words4: " << words4 << '\n';
}

出力:

words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2193 C++11 the default constructor is explicit made non-explicit

[編集] 関連項目

コンテナに値を代入します
(パブリックメンバ関数) [edit]
コンテナに値を代入します
(パブリックメンバ関数) [edit]