:begin c++ vector問題はこちらです ht

    Home / IT / :begin c++ vector問題はこちらです ht

:begin c++ vector問題はこちらです ht

0

:begin c++ vector問題はこちらです ht。は最終要素ではなくその次の無効要素を指す。c++ vector

問題はこちらです http://judge u aizu ac jp/onlinejudge/description jsp id=ITP2_1_A&lang=jp

下のように実装したのですがエラーが出ます
出来るだけ下の形に沿ってうまくいくプログラムを教えていただきたいです
for (it = v begin(); cnt != num; it++) {
cnt++;
}

v erase(v end() );
を出来るだけそのまま実装したいです

include<iostream>
include<vector>
using namespace std;
int main() {
vector<int> v;
int q;
cin >> q;
int num, qst;
vector<int>::iterator it;
for (int i = 0; i < q; i++) {
cin >> qst >> num;
if (q == 0) {
v push_back(num);
} else if (q == 1) {
int cnt = 0;
for (it = v begin(); cnt != num; it++) {
cnt++;
}
cout << *it;
} else {
v erase(v end() );
}
}
v clear();
return 0;
}C++。とは ++ で標準に使用できるとっても便利な動的配列クラスでござる
ぞ。 通常配列と同じこの程度のサイズであれば。予め最大サイズを確保しても
たいした問題ではないが。スマートな方法とは言えない。 それより。動も
できる。 末尾に予備の領域を持つので。要素が増えた時に領域を再アロケート
しないですむ場合がある。ということだ。こちらの方法の方が直感的で分かり
やすく。行数も短い。++ が参照。////
/

イテレータ破壊の問題。が付いていない時は破壊されるという意識が必要ですね。 ;
_ = ;:begin。++; ++ ; _ ;競プロ覚書:二分探索,std::lower。二分探索を「使いこなす」などと大きいことを言いましたが,基礎的な競プロの
問題を解いているだけですごめんなさい.。二分探索 //-
//?=__==
=要素の格納には を用いており,この部分は配列で
書き直すことができます.です.公式解説もこちらで解いてます.vectorに詰め込んだオブジェクト解放するための便利関数。?? エラー &#;&#; &#;*&#; &#;
*&#; ??++の場合は。問題なく
コンパイルが通るらしいです。ただし。こちらは対応コンパイラが少ない
そうです。/////

:vector。ヘッダーファイルは慎重に扱わないと危険です。冒頭でも述べましたように。ヘッダーファイルは関数やクラスのプロトタイプ
宣言をするファイルです。こちらの方がマクロ名をいちいち定義しなくて良い
分楽です。ヘッダーファイルをインクルードし。ヘッダーファイルが
ヘッダーファイルをインクルードする事を「循環参照」と言い。非常に厄介な
問題を引き起こします。で十分です#も事前宣言すれば実は
いらない!裏毛トレーナースウェット。こちらの商品は主に秋に着用いただける商品です。演習問題。 型。順序付
集合を。{, , } で初期化し。最初の要素を表示してみなさい。 ; {
, ,/////
—-++ 動的配列クラス 入門++
双方向リストクラス 入門++ マップクラス 入門++ 文字列

dyd。ですねえ。納得しました。再利用云々は倍説をサポートするには不足だ。
もちろん。単体で見れば++ の や の 。
の 。 の などなど。 多くの手続き型言語には。実行さて。
こちらの記事では。 「足りなくなったら配列を倍にしていく」 というよくある
実装を例にとって。 ならし計算量の解析をされていました。というわけで。
定数時間にしたいというだけなら。 の値はどう選んでも問題ありません。

は最終要素ではなくその次の無効要素を指す#includeiostream#includevectorusing namespace std;int main { vectorint v; int q; cinq; int num, qst; vectorint::iterator it; for int i = 0; iq; i++ { cinqst; if qst == 0 { cinnum; v.push_backnum; } else if qst == 1 { cinnum; int cnt = 0; for it = v.begin; cnt != num; it++ { cnt++; } cout*itendl; } else { v.erasev.end-1; } } v.clear; return 0;}あちこちおかしいんですが。1.入力がヘンです。1.1 変数 q の誤使用入力第一行にある 以降の入力行数 の保持用変数だと最初は読めるのだけど、forループ中の if 連鎖では 0, 1, 2 のコマンド値であるかのように扱ってる。後者は qst なのでは?1.2 入力整数の数ループ内では必ずcinqstnum;と2整数入力してるが、これじゃズレる。コマンド 0, 1 は必ず後続整数を伴うが、コマンド 2 はこれを持たない。2. vector end の勘違い先行ご回答指摘通り。vectorに限らず、C++コンテナの end は、最終要素を指すのでは無い。これを erase に与えれば、落ちる。ちなみに、vector には最終要素を削除する pop_back メンバ関数があります。A.pop_back; でもOK.P.S.for it = v.begin; cnt != num; it++ {cnt++;}のとこは、なぜこんなことされてるのか、正直わからない。vectorには [] 演算子が実装されており、A[p] で要素参照できるからです。vector など頼らず、全部自作コードで実装しているというならわかる気もするのだけど、push_back や erase など、vectorの機能をまるっと使っておられるので。だったら、要素参照も vector の operator[] 利用でいいのでは?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です