C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C++のアルゴリズムのソースコードについてです


(過去ログ 131 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■77345 / inTopicNo.1)  C++のアルゴリズムのソースコードについてです
  
□投稿者/ EDF (31回)-(2015/10/10(Sat) 18:43:06)

分類:[C/C++] 

次の問題(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0060)を解くために次のようなソースコードを書きました。
そしてVIsual Studio C++(versionは2013)で試したところ
7以下の値の値には適切な答えを出すのですが8以上の値を入れると
Debug Assertion Failed!

プログラム名

Expression:vector iterator + offset out of range

という警告とともにプログラムが停止してしまいます。
どうしたらよいでしょうか?
ちなみにソースコードはこちらです
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
	vector <int> v;
	int a[4];
	for (int i = 1; i <= 10; i++){
		v.push_back(i);
	}
	cin >> a[0] >> a[1] >> a[2];
	sort(a, a + 3);
	for (int i = 0; i < 3; i++)
		v.erase(v.begin() + a[i] - i - 1);
	if (a[0] + a[1] + v[3] <= 20)cout << "YES" << endl;
	else cout << "NO" << endl;

}


引用返信 編集キー/
■77346 / inTopicNo.2)  Re[1]: C++のアルゴリズムのソースコードについてです
□投稿者/ Hongliang (356回)-(2015/10/10(Sat) 20:25:29)
デバッガの使い方を知っておくべきでしょう。

assertionが出た時、中止・再試行・無視の選択肢が出ますが、ここで再試行を選ぶと、ブレークポイントが発生した旨のダイアログが出ます。
このダイアログでさらに中断を選ぶと、プログラムがブレーク(中断)され、assertionの原因となった箇所が表示されます。
(もしライブラリの内部実装が表示された場合、「呼び出し履歴」ウィンドウで行をダブルクリックすることで自分のコードの場所までさかのぼれます)
そこで「自動変数」ウィンドウや「ウォッチ」ウィンドウを使って各種変数を確認し、assertionとなった原因を追及します。
今回のassertionはvectorに対してイテレータの指す位置がおかしいということなので、想定したインデックスになっているかとか、コレクションに正しく値が格納されているかとか。

// ところで、途中でaをソートしちゃってるから、最後の条件判断でa[0] + a[1]が手持ちのカードの合計かどうかは分からなくなっちゃってますね−。
引用返信 編集キー/
■77359 / inTopicNo.3)  Re[1]: C++のアルゴリズムのソースコードについてです
□投稿者/ Jitta (161回)-(2015/10/14(Wed) 09:17:28)
No77345 (EDF さん) に返信

>
> Expression:vector iterator + offset out of range
>
> という警告とともにプログラムが停止してしまいます。
> どうしたらよいでしょうか?

ヒント
優先順位
左から解決
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -