問題CPP02100の解答例と解説 C++ Lv.3

vector<int> 総和(15分)


<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

まず、3行目の引数の説明だけど、const 修飾子は、その引数の中身を変えないでね、という意味だよ。つまり vectorA に要素を追加したり、変更したり、削除したりしないでね、ということだよ。そして、vector<int> というのは、int型の値を格納している vector というコンテナという意味だよ。そして、この引数には&がついているけど、これは、この引数はほかのメモリ領域にある値を参照しているよ、という意味だよ。参照に関しては、この問題よりも易しいレベルで問題を用意しているから、やっていなかったり、忘れていたら復習しよう。
 参照渡し abs

そして、本題のプログラムの中だけど、vector の [] を使って配列のように各要素を取得することができるよ。ただし、vectorのサイズを超えたインデックス(何番目の要素か、ということ)を指定して値を取得しようとすると、プログラムがクラッシュするから気を付けよう。


<解答例 2>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

解答例1とほとんど同じだけど、vectorA.size() を for 文の中に入れているところが違うね。これだと、for文のループが回るごとに、vectorA.size() が呼ばれてしまって、その分、ほんのわずかだけど、処理が遅くなるよ(こういう、回避できる処理のことをオーバヘッドと言ったりするよ)。for文をループを回している最中に vector のサイズが変わらないなら、解答例1のように最初に1回だけ実行しておいた方がいいよ。


<解答例 3>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

こちらはイテレータを使った例だよ。イテレータは、begin() 関数と end() 関数で最初と最後の次の要素にアクセスするためのポインタのようなオブジェクトで、*iter とすることで、値を取得できるんだ。最初はとっつきにくいかもしれないけど、vectorの中をソートしたり、いろいろなことをしたい時に便利だよ。


<解答例 4>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

C++標準ライブラリのaccumulate 関数を使っているよ。accumulate 関数は、第一引数と第二引数で、加算する要素の最初と最後を指定するよ。vectorの中の要素の一部でもいいから、必ずしも begin()とend()を指定する必要はなくて、イテレータであればどこの要素でもいいよ。そして3番目の引数で、さらに加算する値を指定できるよ。この問題ではそれは必要ないので、0を指定しているよ。




初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録