2012-08-12 47 views
-1
int main() { 

    vector <int> multiples(1); 

    cout << multiples[0]; 

} 

然而,这将返回0时,我希望它是1,这发生在当我初始化一个元素的矢量,我可以访问第二元件,向量中不存在的元素,我得到最右边元素的值(在本例中为4)。但是我似乎无法得到第一个元素。谁能解释为什么?如何正确访问矢量的元素?此外</p> <pre><code>int main() { vector <int> multiples(1, 4); cout << multiples[1]; // 4 } </code></pre> <p>,当尝试访问:

+0

1是它有多少个元素,而不是索引的位置,索引位置仍然从0开始,就像一个数组。 – Annabelle 2012-08-12 00:30:20

+0

看到这个问题的未来支持您正在尝试使用的概念:http://stackoverflow.com/questions/2409819/c-constructor-initializer-for-arrays – 2012-08-12 00:38:10

回答

4

vector <int> multiples(1); 

创建为int的矢量大小为1,单个元件是值初始化,这对于ìnt意味着零初始化。所以你得到一个有一个条目的矢量,值为0。而这一个

vector <int> multiples(1, 4); 

创建一个大小为1的矢量,这次的值为4。如果您尝试访问multiplies[1],您将超出1号大小矢量的范围,从而调用未定义的行为。它要初始化值1的两个元素和4,在C++ 11的载体可以做到这一点:

vector <int> multiples{1, 4}; 
+0

有没有办法做'倍数{1,4 }'同时制作一个指定的大小? – 0x499602D2 2012-08-12 00:47:09

+0

@David'multiples {1,4}'使其大小为2,即元素的数量。您可以随意添加,例如'倍数{1,2,3,4,5}' – juanchopanza 2012-08-12 00:49:59

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 

它是不正确初始化,因为只有一个元素。

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 
} 
0

其实,你不需要指定向量的大小。 您可以根据需要添加元素(具体对象),这是主要优点和矢量的使用。添加一个元素到矢量可以很容易地完成:

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

希望它有帮助。

相关问题