C++ vector クラスの標準出力方法メモです。
いくつか手法があります。
目次
std::vector の標準出力方法
for 文で要素を順に出力する
最もストレートな方法です。
可読性も高いので、他の方法に慣れなければ、これで出力しておけば間違いないです。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, 4};
for (auto item : v)
{
std::cout << item << ", ";
}
std::cout << std::endl;
return 0;
}
0, 1, 2, 3, 4,
なお、末尾のカンマを出力しない方が見た目が良いですが、この記事の目的から逸れるので対処をサボっています。
for_each 関数のラムダ式で出力する
algorithm の for_each 関数を利用することでも、要素を標準出力することができます。
ただ、簡潔な for 文より可読性が落ちるので、敢えてこれを利用するメリットはなさそうに思います。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v{0, 1, 2, 3, 4};
std::for_each(
v.begin(), v.end(), [](auto x)
{ std::cout << x << ", "; });
std::cout << std::endl;
return 0;
}
0, 1, 2, 3, 4,
for_each 関数は、第3引数に指定する処理が既に関数化されている場合に有用なものかと思います。
そうでなければ for 文の方が良いかと思います。
ostream_iterator で出力する
ostream_iterator に、出力リストをコピーするやりかたです。
直観的ではないので個人的にはあまり好きではないですが、よく見かけるやり方です。
記述が簡潔、ラムダ式の利用がない、という観点では上に紹介した例よりはベターな方法に思います。
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, 4};
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
std::cout << std::endl;
return 0;
}
0, 1, 2, 3, 4,
出力形式を整える
この記事で掲載した例では、末尾のカンマを雑に出力しているのでイマイチです。
この点を改善した例も掲載しておきます。
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
std::vector<int> v{0, 1, 2, 3, 4};
std::cout << "[";
std::copy(v.begin(), v.end() - 1, std::ostream_iterator<int>(std::cout, ", "));
std::cout << v.back() << "]" << std::endl;
return 0;
}
[0, 1, 2, 3, 4]
コメント