- 締切済み
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++の裾野を広げると考えて、初心者を助けてください。 よろしくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- _kappe_
- ベストアンサー率68% (1581/2304)
>1番目ではなく例えば上記 list a={1, 2, 3}の2番目だけ取り出すには、 >auto itr = a.begin(); >for(int i = 0; i < 2; ++i) >++i; >のようにするのだと勉強しましたが もし写し間違いではなく本当にそのように学んだのであれば、その教材は今すぐ放り捨ててください。間違った教材で学んでも混乱するだけです。
- _kappe_
- ベストアンサー率68% (1581/2304)
(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 } }
お礼
_kappe_様、 早速のご回答ありがとうございます。 アドバイスに従って、早速プログラムを書いてみます。 僕はC++を独学でオンラインテキストで1カ月前から始めた高校生で、基本的なことで困っているので、解決していただいてありがとうございます。 TopyTopy
お礼
アドバイスありがとうございます。 Listがのっているサイトが意外に少なく、素人なので、正誤判定もできず、なかなかよいサイトを見つけるのが難しい状況です。