数値演算の STLアルゴリズム 解答ページ | Programming Place Plus C++編【標準ライブラリ】 第24章

トップページC++編

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① accumulate関数を使って、指定範囲内の std::string の連結を行えることを確認してください。


関数や関数オブジェクトを指定しない accumulate関数は、+演算子を使うので、std::string では連結を意味します。

#include <numeric>
#include <iostream>
#include <vector>
#include <string>

int main()
{
    std::vector<std::string> v;
    v.push_back("aaa");
    v.push_back("bb");
    v.push_back("cccc");

    std::cout << std::accumulate(v.begin(), v.end(), std::string()) << std::endl;
}

実行結果

aaabbcccc

問題②

問題② accumulate関数を使って、指定範囲内の std::string の長さの合計を求める処理を作成してください。


accumulate関数の第4引数に、関数や関数オブジェクトを渡せば、「合計」の意味合いを変更できます。

#include <numeric>
#include <iostream>
#include <vector>
#include <string>

namespace {
    std::string::size_type LengthSum(std::string::size_type len, const std::string& str)
    {
        return len + str.length();
    }
}

int main()
{
    std::vector<std::string> v;
    v.push_back("aaa");
    v.push_back("bb");
    v.push_back("cccc");

    std::cout << std::accumulate(v.begin(), v.end(), 0, LengthSum) << std::endl;
}

実行結果

9

第1引数にこれまでの合計値が、第2引数に現在注目している要素が渡されてきます。


参考リンク


更新履歴

’2016/12/3 新規作成。



第24章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る