• ベストアンサー

VC++のデバッガでvectorの要素をウォッチしたい

VC++のデバッガでSTLのvectorの要素をウォッチするやり方があったのですが 方法を忘れてしまいました^^; 例えば vector<int> v; v.push_back(1); v.push_back(2); などのようにしておいて、 デバッグ中にウォッチウィンドウ上で v[1]の要素の内容を表示する方法があったのですが・・・ 確か、v[1]の頭に何か修飾したような記憶がありますが 定かではありません。 どなたかご存知の方、教えてください。 宜しく御願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MASATO3
  • ベストアンサー率60% (27/45)
回答No.1

Visual Studio.NET 2003付属のSTLの場合、 ウォッチウィンドウに v._Myfirst[1] と入力すればv[1]の値が表示できます。 他のSTLの場合は分かりませんが、 とりあえずvと入力すればvのメンバ変数は表示されると思いますので、それっぽいものを_Myfirstの代わりに使ってみて下さい。 また、おまけですが、 v._Myfirst,10 と入力すると、 先頭から10個の要素をまとめて読むことができます。

suzaki
質問者

補足

ご回答ありがとうございます。 当方のVCのバージョンは6.0なのですが やはり方法が異なるようで表示できませんでした。 説明不足ですみませんでした^^;

関連するQ&A

  • c++のvector::erase

    vector::eraseについて質問させてください。 vector::eraseでググるとforループ内でのeraseの仕方は 書いていあるのですが、単純に1要素だけeraseする 例が見当たらなかったので教えてください。 1要素を削除する場合、 以下のような書き方でよろしいのでしょうか? いちおう正しく動作しているようです。 ただ、疑問なのは途中の要素[2]を削除しているので、 後半の要素が詰め直されているのか、 そのあたりが自信がなくて不安です。 vector<string> v; v.push_back("0a"); v.push_back("1a"); v.push_back("2a"); v.push_back("3a"); v.push_back("4a"); v.erase( v.begin() + 2 );//v[2]を削除 //結果表示 for(unsigned int i=0; i<v.size(); i++){ cout<<v[i]<<"\n"; } cout<<endl;

  • const参照メンバを含む要素のvector

    久しぶりに趣味でプログラミングしてます。 const参照のメンバを含むオブジェクトを要素に持つvector って使えます? 下記はbcc32でコンパイルするとエラーが出ます。 _algobase.h 145:コンパイラは 'operator=' クラスの hoge を作成できない(関数 _STL::hoge * __copy<hoge *,hoge *,int>(hoge *,hoge *,hoge *,const random_access_iterator_tag &,int *) ) ちなみにv.clear();をコメントアウトするとコンパイルは通り実行も問題なくできます。 clear()の替わりにpop_back()としてもコンパイルは通り実行も問題なくできます。 コンパイラーのバグ?そもそもこんなことをしてはダメ? よろしくお願いします。 class hoge { public:  hoge(const int &i):_i(i){};  virtual ~hoge(){};  operator int () const {return _i;}  const int &_i; }; int main() {  int i1=1;  int i2=2;  hoge h1(i1);  hoge h2(i2);  std::vector<hoge > v;  v.push_back(h1);  v.push_back(h2);  v.clear();  std::vector<hoge >::iterator iter = v.begin();  while( iter != v.end() ){   std::cout << *iter << "\n";   ++iter;  }  return 0; }

  • vector間における効率的な値の比較

    2つのベクターに入ったdoubleの網羅的な比較を行う関数をC++で書こうとしています。 (VC++ 2008) doubleのベクター vctr_1 , vctr_2 があるとします。 vctr_1 には (100.0, 200.5 , 300.1 , 400.0 ) vctr_2 には(50.0 , 70.2, 100.1, 220.0 , 300.0 ) というdouble の値が入っていて vctr_1の値のうち、vctr_2に近い値(誤差0.2以内)が見つかるものを.新しいベクターとして返すという処理を考えています。 この場合 100 : 100.1 と300.1: 300.0 が 誤差 0.2 未満で近い値といえ、100 と300.1が格納されたベクターを返す、という処理です。 私の考えた方法はベクターaの各要素に対してベクターbの各要素をループで比較する、というものでした。 以下コード ---------------------------- //比較を行う関数。ベクター1、2 要素の比較をし誤差内の数値をベクター1からとりだし、別のベクターとして返す。 vector<double> compare_doubles_with_tol(vector<double> v1,vector<double> v2 , double tol ){ //似た値を格納するベクター vector<double> v_match; //ベクター1に関してループ vector<double>::iterator it1 = v1.begin(); while( it1 != v1.end() ){ //ベクター2に関してループ vector<double>::iterator it2 = v2.begin(); while( it2 != v2.end() ){ //誤差内の値を見つける if( fabs(*it1 - *it2) < tol ){ v_match.push_back(*it1); } ++it2; } ++it1; } return v_match; } int main() { //ベクター1 std::vector<double> vctr_1; vctr_1.push_back(100.0); vctr_1.push_back(200.5); vctr_1.push_back(300.1); vctr_1.push_back(400.0); //ベクター2 std::vector<double> vctr_2; vctr_2.push_back(50.0); vctr_2.push_back(70.2); vctr_2.push_back(100.1); vctr_2.push_back(220.0); vctr_2.push_back(300.0); //誤差0.2内で似た値があるものを新たなベクターとして得る。 vector<double> matched = compare_doubles_with_tol(vctr_1,vctr_2,0.2); for (int i = 0 ; i < matched.size() ; ++i){ cout << matched[i]<<endl; } return 0; } ------------------------- このコードで望んだ結果は得られますがループの繰り返しを行っていて処理が遅くなってしまいます。実際の仕事ではベクターの要素数が100前後のものを非常に数多く処理しなければならず、このままでは処理時間が膨大なものになってしまいそうです。 このような場合どのような処理、コードを作成すれば処理速度の向上が望めるでしょうか。

  • コンテナ要素の削除について

    今vectorの勉強をしているのですが、要素を削除できなくて困っています。 下記のch1とch2において、 vector<int> ch1; vector<int> ch2; ch1.push_back(10); ch1.push_back(11); ch1.push_back(12); ch1.push_back(13); ch1.push_back(14); ch1.push_back(15); ch2.push_back(13); ch2.push_back(14); ch2.push_back(15); ch1とch2が一致する要素は削除して、一致しない値を得たいのですがどうしたらいいのでしょうか? 結果としては、 ch1に、10・11・12のみが残る感じです。 よろしくお願い致します。 int ch1_size = ch1.size(); int ch2_size = ch2.size(); vector<int>:: iterator itr1; itr1=ch2.begin(); for(int a=0;a<ch1_size;a++){ for(int b=0;b<ch2_size;b++){ if(ch1[a]==ch2[b]){ itr1+b; ch1.erase(itr1); } } }

  • C++でのSORT

    受験番号(int型)と成績(int型)からなる表(可変長)を成績順に並び替えるsortを例えばSTLを使って実現したいと思います。 そこで、構造体をvectorコンテナにのせることを考えました。ですが、push_backの扱い方が間違っているようです。STLのSORTを使う知識以前に、複数要素を持つコンテナが作れません。 受験番号  成績 1     65 2     92 3     95 を 受験番号  成績 3     95 2     92 1     65 に並び替える。 #include <vector> #include <algorithm> struct goukakusya { int number; int score; }; main() { vector<goukakusya> table1; table1.number.push_back(1); table1.core.push_back(65); table1.number.push_back(2); table1.core.push_back(92); table1.number.push_back(3); table1.core.push_back(95); } よろしく、御願いします。

  • C++ vectorに配列をプッシュしたい

    C++のstd::vectorが格納する要素として配列を指定することはできますか vectorを使って2次元配列を表現したいときは,たとえば std::vecor<std::vector<int>> v; とすれば2次元配列が表現できますよね. 2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました. (2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません) std::vector<int[2]> v; int a[2]; a[1] = 1; a[0] = 2; v.push_back(a); という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか. あるいは,もし可能ならどのように書けばよいのでしょうか. 結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます. 「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした. よろしくお願いします.

  • n × n の二次元配列の各要素に vector を突っ込みたいと思っ

    n × n の二次元配列の各要素に vector を突っ込みたいと思っています。 ちょうど三次元グラフで n × n の地表に可変な高さの草が生えてるようなのを想像していただければやりたいことが分かっていただけるかと。 で、このようにしてまずは確保しました。 int i, n = 2; vector<int> ***vecMatrix; vecMatrix = new vector<int>**[ n ]; for (i = 0 ; i < n ; i++) vecMatrix[ i ] = new vector<int>*[ n ]; ここまでは問題ないのですが、次に vecMatrix[ i ][ j ] に対して要素を格納しようとして、 vecMatrix[ 0 ][ 0 ]->push_back( 1 ); とすると segmentation fault で落ちます。 ううーん、なぜでしょう。

  • STLベクトルコンテナ

    vectorの1次元目の要素と1次元目のサイズを常に持ち回す方法しか思いつきません。 int dim1size = 2; int dim1ite = 0; vector<vector<char *> > vec; vec.resize(dim1size); vec.at(dim1ite).reserve(2); どこかの関数で vec.at(dim1ite).push_back("浅倉"); vec.at(dim1ite).push_back("東京"); dim1ite++; どこかの関数で vec.at(dim1ite).push_back("稲垣"); vec.at(dim1ite).push_back("大阪"); dim1ite++; どこかの関数で vec.at(dim1ite).push_back("内山"); vec.at(dim1ite).push_back("名古屋"); dim1ite++; このようなソースです。 dim1sizeとdim1iteを持ち回さなくてもvecだけで1次元目のサイズを気にすることなくpush_backを実行するよい方法はありませんか? 上記ソースではpush_back("内山");の前にresizeが必要です。これを自動でやってほしいのです。

  • STLのvectorの削除

    STLのvectorの削除を行う場合に vector<myclass> v; ・・・ v.erase(it); ・・・ というように削除するiteratorを渡しますが、 任意のインデックスのvectorを削除した場合は、 どのようにそのiteratorを取得するのでしょうか。 例えばv[5]を削除したのですが、 vector<myclass>::iterator it=v.begin(); for(int i=0;i<5;i++) it++; v.erase(it); というbegin()やend()からのインクリメント・デクリメントで取得するしかないのでしょうか? ご教示願います。

  • STL vectorの初期化

    STL vectorの初期化についてなんですが 以下のようなクラスのprivateなメンバ変数としてvectorを定義し それをメソッド内のループ処理にて初期化しながら使用したいのですが 初期化の仕方が分かりません。コンストラクタを呼べば初期化されるようですが 以下のようにヘッダとソース内で2度同じような宣言をしてしまっても問題ないのでしょうか? //=== test.h === class test { private : vector<int> array; public : int fnc(); }; //=== test.c === int fnc() { for (int i = 0; i < 10; i++) { //★ここで初期化したい vector<int> array;  ←これで問題ないか? for (int j = 0; j < 10; j++) { array.push_back( md ); } } } C#などでは宣言とインスタンス生成を別に分けられたのですがC++も同様の事が出来るのでしょうか? 一応「array = new vector<int>;」といれて見たのですがエラーが出ました。

専門家に質問してみよう