0

私はこれを理解しようとしてとても迷っています。単純な配列を使用した場合に必要となる空き領域と再編成を追跡する必要がないように、ベクトルを使用することを計画している独自のデータ構造があります。正しく初期化していないのかどうかはわかりませんが、私が行うすべての割り当ては、空中に消えてしまうようです。

これが私が話していることを説明するためのいくつかの簡単なコードです:

#include <vector>
#include <iostream>

using namespace std;

struct node
{
    int test_int;
    bool test_bool;
};

struct file
{
    vector<node> test_file;
};

int main()
{
    file myfile;
    int myint;

    cout << "Enter number: ";
    cin >> myint;

    myfile.test_file[0].test_int = myint;

    cout << "Number entered is: " << myfile.test_file[0].test_int << endl;

    return 0;
}

つまり、基本的には構造体内のベクトルです。ベクトルにアクセスする通常の方法は機能していないようです。ベクトルに対して何も読み書きできないためですが、機能しているようmyfile.test_file.size()に見えます(新しく作成された構造体から「0」を返すなど)。 )。で直接インデックスにアクセスしようとすると、実際には存在しないか myfile.test_file[0].test_intのように実行時エラーが発生します。vector subscript out of range

正しく初期化していないのですか?これは私にはちょっとばかげているようで、なぜそれがそのように機能しないのか理解できません。

編集:私が参照している動作をより明確に示すためにコードを編集しました。これはコンパイルされますが、ランタイムエラーが発生しますvector subscript out of range

4

1 に答える 1

1

ベクトルの終わりを超えて要素にアクセスしているため、編集されたバージョンは機能しません。

    myfile.test_file[0].test_int = myint;

これを行う前に、ベクトルを使用するか、 :resize()を使用して要素を追加する必要があります。push_back()

    myfile.test_file.push_back(node());
    myfile.test_file[0].test_int = myint;
于 2012-11-25T08:03:29.900 に答える