こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C++ listに関する2質問

C++勉強中初心者でlistに関して2つ質問させてください。(1)C++2つのリスト間の足し算、(2)1つのリスト内の部分和の質問です。
リストを使って、2つのリスト間の足し算をしたいと思っています。
例えば以下のようにlist a={1, 2, 3}とlist b={2, 4, 6} をベクトルのように足して、
結果list c={3, 6, 9}を得たいです。

(1) まだ足し算まで行かない部分のプログラムですが、list aの第一要素は
auto itr = a.begin();
で取り出せるものの、

list aの第一要素を保存したまま、別のリストlist bの第一要素を取り出すには
どうすればよいのでしょうか?

これができないと2つのリストの足し算は難しいと思っています。

(2)1つのリスト内で部分的に足し算をする場合(例えば、10要素あるリストの1番目と2番目、3番目と4番目、5番目と6番目、のように2個ずつ足した結果を得たい)に、例えば、上記 list a={1, 2, 3}で1番目と2番目だけ足したい時に、3番目を消去して全合計、でない方法はありませんか?
1つのリストから2要素を取り出す方法を知りたいです。
1番目ではなく例えば上記 list a={1, 2, 3}の2番目だけ取り出すには、
auto itr = a.begin();
for(int i = 0; i < 2; ++i)
++i;
のようにするのだと勉強しましたが、1つのリストから2要素を取り出す方法が分からず伺っています。


基本的な質問ですみませんが、C++の裾野を広げると考えて、初心者を助けてください。
よろしくお願い申し上げます。

投稿日時 - 2020-09-21 21:39:03

QNo.9802289

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>1番目ではなく例えば上記 list a={1, 2, 3}の2番目だけ取り出すには、
>auto itr = a.begin();
>for(int i = 0; i < 2; ++i)
>++i;
>のようにするのだと勉強しましたが

もし写し間違いではなく本当にそのように学んだのであれば、その教材は今すぐ放り捨ててください。間違った教材で学んでも混乱するだけです。

投稿日時 - 2020-09-22 16:47:58

お礼

アドバイスありがとうございます。

Listがのっているサイトが意外に少なく、素人なので、正誤判定もできず、なかなかよいサイトを見つけるのが難しい状況です。

投稿日時 - 2020-09-23 21:51:37

ANo.1

(1)auto itrB = b.begin();のように、別の変数を用意してやればいいです。
(2)挙げられているコード断片がリストの2番目だけの取り出しになっていません。勉強し直しましょう。

list<int> lst = {10, 11, 20, 21, 30, 31, 40, 41, 50};
auto itr = lst.begin();
while (itr != lst.end()) {
auto x = *itr++;
if (itr != lst.end()) {
auto y = *itr++;
// ここでxが2n番目の要素の値、yが2n+1番目の要素の値 (nは0以上の整数)
} else {
// リストの要素数が奇数
// 最後の要素の値はx
}
}

投稿日時 - 2020-09-22 07:47:29

お礼

_kappe_様、

早速のご回答ありがとうございます。
アドバイスに従って、早速プログラムを書いてみます。
僕はC++を独学でオンラインテキストで1カ月前から始めた高校生で、基本的なことで困っているので、解決していただいてありがとうございます。

TopyTopy

投稿日時 - 2020-09-22 14:00:45

あなたにオススメの質問