-1
int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

当我希望它为 1 时返回 0。当我用一个元素初始化向量时会发生这种情况,我可以访问第二个元素,但是:

int main() {

    vector <int> multiples(1, 4);

    cout << multiples[1]; // 4

}

此外,当我尝试访问向量中不存在的元素时,我会得到最右边元素的值(在本例中为 4)。但是我似乎无法获得第一个元素。谁能解释为什么?

4

4 回答 4

4

vector <int> multiples(1);

创建一个大小为 1 的 int 向量。单个元素是value initialized,这ìnt意味着零初始化。所以你得到一个带有一个条目的向量,带有 value 0。和这个

vector <int> multiples(1, 4);

创建一个大小为 1 的向量,这次使用 value 4。如果您尝试访问multiplies[1],您将超出 size-1 向量的范围,从而调用未定义的行为。如果你想用两个元素值1和初始化一个向量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);

创建向量,其中 1 个 int 元素由 4 初始化。

cout << multiples[1]; // 4

这是不正确的,因为向量中只有一个元素。

于 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

实际上,您不需要指定向量的大小。您可以在需要时添加元素(具体的对象),这是矢量的主要优点和用途。向向量中添加元素可以通过以下方式轻松完成:

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

希望能帮助到你。

于 2012-08-12T01:29:23.113 回答