-1
int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

これは、1 にしたいときに 0 を返します。これは、ベクトルを 1 つの要素で初期化すると発生しますが、2 番目の要素にアクセスできます。

int main() {

    vector <int> multiples(1, 4);

    cout << multiples[1]; // 4

}

さらに、ベクトル内の存在しない要素にアクセスしようとすると、一番右の要素 (この場合は 4) の値を取得します。しかし、最初の要素を取得できないようです。誰でも理由を説明できますか?

4

4 に答える 4

4

これ

vector <int> multiples(1);

サイズ 1 の int のベクトルを作成します。単一の要素はvalue initializedであり、 forìntはゼロ初期化を意味します。したがって、値が 1 つのエントリを持つベクトルが得られます0。そして、これ

vector <int> multiples(1, 4);

サイズ 1 のベクトルを作成します。今回は value を使用します4。アクセスしようとするとmultiplies[1]、サイズ 1 のベクトルの境界を超えてしまうため、未定義の動作が発生します。1値との 2 つの要素でベクトルを初期化したい場合4、C++11 では次のように実行できます。

vector <int> multiples{1, 4};
于 2012-08-12T00:28:31.377 に答える
1
int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

http://cplusplus.com/reference/stl/vector/vector/

1 つの int 要素を持つベクトルを作成し、デフォルトで初期化されます (つまり、int() == 0)。

vector <int> multiples(1, 4);

4 で初期化された 1 つの int 要素を持つベクトルを作成します。

cout << multiples[1]; // 4

ベクトルには要素が 1 つしかないため、正しくありません。

于 2012-08-12T00:28:46.537 に答える
1

このコードを見てください。問題が表示されるはずです。期待した方法でベクトルを初期化していません。

int main()
{
    vector <int> multiples(2); // create a vector of size two with default value of 0.
    multiples[0] = 10; // set element at index 0 = 10
    multiples[1] = 20; // set element at index 0 = 10
    cout << multiples[0]; // 10
    cout << multiples[1]; // 20
}
于 2012-08-12T00:33:39.147 に答える
0

実際には、ベクトルのサイズを指定する必要はありません。必要に応じて要素 (具体的にはオブジェクト) を追加できます。これがベクトルの主な利点であり、使用法です。vector に要素を追加するには、次の方法で簡単に実行できます。

multiples.push_back(1);
multiples.push_back(4);

それが役に立てば幸い。

于 2012-08-12T01:29:23.113 に答える