おいて、ありえないことをすべて選んでください。あること要素を追加したときに、容量が増えること要素を追加したときに、容量が増えないこと1番はありえます。あることがありえます。実際の要素数よりも、容量のほうが大きいことは、むしろよくあることです(本編解説)。容量は、実際に存在している要素の値を記憶するために、何個分のメモリが確保済みであるかということなので、要素数が容量より大きいことはありえません。要素を追加しようとしたときに、容量が不足する場合には、新たなメモリが確保され、容量が増加します。要素を追加しようとしたとき、容量が十分にあれば、メモリを確保する必要はないため、容量は変化せず、要素数だけが増えることになります。(確認★)次のプログラムの問題点を指摘してください。}}要素を追加する前に取得しておいたイテレータを、要素の追加後に使ってしまっていることが問題です。要素を追加しようとしたときに、容量が不足していて、メモリの再割り当てが起きた場合、既存の要素がメモリ上で別のところへ移動させられます。結果、イテレータが指し示す先には要素がなくなっていることになります。この現象は、「イテレータが無効になる」と表現されます。無効になったイテレータは使ってはいけません(本編解説)。要素の追加後には、イテレータはあらためて取得しなおすようにします。格納していくプログラムを作成してください。入力は何度も繰り返し受け付け、整数とみなせない入力がなされた時点で終了するものとします。入力された内容71058要素はいくらでも追加できる仕様なので、あらかじめ一定量の要素をもった状態で初期化するのではなく、空の状態にしておいて、push_back関数で追加していくようにしています。するプログラムを作成してください。要素をあいだに挿入するには、insert関数を使います(本編解説)。文字列を追加する場合は、挿入位置を添字で指定する必要があります。指定した位置の手前に挿入されます(本編解説)。今回、文字列の内容が分かっているので、決め打ちで指定してしまえます。World.ほかの方法として、挿入すべき位置をきちんと探してから、その場所に挿入する方法も考えられます。位置を探して、その手前に挿入するには次のようにします。World.文字列の挿入を終えたら、break文でループを抜けています。見つけてしまい、挿入も何度も行われるため、for文を抜けられません。要素を追加し続けたとき(100万個程度)、容量がどのように変化するか調べてみてください。次のように、容量が変化したタイミングを捕まえて、そのときの要素数と容量を出力するようにしてみます。使っている環境によって、結果は異なります。対して、35回程度に済むようになっていることがわかります。して極力、時間がかかるメモリの再割り当てを避けるように工夫されています。なるところは例外として)。(調査★★★)reserve関数を使うと、メモリを事前に確保させることができます。問題5と同様のことをして、挙動の変化を確認してください。100万個分の容量を確保させてみます。1000000初期状態の要素数と容量しか出力されなくなりました。push_back関数を使っても、容量に変化は起きていないということです。したがって、メモリの再割り当てが起こることもなく、劇的に効率が良くなることが分かります。イテレータが無効にならず、添字がずれないことも利点になります。当サイトの参考書籍一覧ページ。当サイトの参考Webサイト集。