-1

現在、文字と数字をキーとして使用するベクトルを使用する C++ プログラムがあります。例えばmyvector['A'][1] = line.substr(0,7)。しかし、myvector[1][3] = line.substr(0,7)両方のキーを数字として使用できるようにするには、それが必要です。

私の現在の作業コードでは、これがありました:

std::vector<std::vector<std::string> >myvector;

文字列を整数に変更するだけでうまくいくと思いましたが、「セグメンテーション違反 (コアダンプ)」または「代入で 'std::basic_string' を 'int' に変換できません」というエラーが発生します。

std::vector<std::vector<int> >myvector;

エラーが非常に曖昧であることは知っていますが、C++ は初めてなので、エラーに対する他の特定のコマンド応答を見つける方法がわかりません。私はウェブ上でたくさんの例を探しましたが、残念ながらそれらのいずれもコンパイルできませんでした. 任意の支援をいただければ幸いです。お時間をいただきありがとうございます。

何らかの形で範囲外のインデックスを使用している場合は、インデックスを入力する方法を次に示します。

myvector[rn].resize(100);
std::ifstream fin(argv[3]);
std::string line;
int rn = 0;
int rln = 0;
while( getline(fin, line) ) {  
rn = 0;
while(rn < line.length()/7){
  myvector[rn][rln] = line.substr (rn*7,7);
  rn++;
}
rln++;
}

「line.substr (rn*7,7)」を出力すると、結果は期待どおりになり、この変数をベクターに設定できません。また、rn は約 10+ で終了し、rln は 6 で終了します。

4

2 に答える 2

1

C++ では、文字列は"test"単一コード'test'ではなく二重引用符で囲まれています。試してください:

std::vector<std::vector<std::string> >myvector(3);
myvector[1].resize(10);
myvector[1][3] = "test";
std::cout << myvector[1][3] << std::endl;

また、 std::vector には重要な概念がありません。実際には access を呼び出していますoperator[]

于 2013-01-27T06:22:25.090 に答える
1

何も変更する必要はありません。ベクターは連想コンテナーではありません。インデックスを介してのみデータにアクセスできます。これは、必要に応じて文字が自動的に int にアップキャストされるため、コードで既に起こっていることですdata['A']。 ASCII エンコーディングでは int 値として扱われます。

いずれにせよ、値がまばらな場合は、 のような連想コンティナーの使用を検討してくださいmap<vector<string> >

于 2013-01-27T06:20:04.030 に答える