エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

std::listに要素をまとめて追加する方法

daiki41ti 【急募】std::listに要素をまとめて追加する方法

望んでいる解決法ではないかもしれないけれど。

#include <iostream>
#include <list>

#define numberof(array) (sizeof(array)/sizeof(*array))

int main(int, char* [])
{
    int array[] = { 1, 2, 3, 4, 5 };

    // まとめて初期化
    std::list<int> int_list(array, array + numberof(array));

    for(std::list<int>::iterator i = int_list.begin(); i != int_list.end(); ++i)
    {
        std::cout << *i << std::endl;
    }
    std::cout << std::endl;

    // まとめて追加
    int_list.insert(int_list.end(), array, array + numberof(array));

    for(std::list<int>::iterator i = int_list.begin(); i != int_list.end(); ++i)
    {
        std::cout << *i << std::endl;
    }

    return 0;
}


STLのコンテナのコンストラクタには、イテレータで要素の範囲を指定して初期化したり挿入したりするものがあります(くわしくはこことか→list - C++ Reference)。
で、ポインタもイテレータとして扱えるので配列の要素をコンテナの初期化/挿入に使うこともできるわけです。


あ、配列でなくて、普通にlistをはじめSTLのコンテナを使ってもいいわけですが(その場合、範囲はbeginendで指定)。