int main() {
vector <int> multiples(1);
cout << multiples[0];
}
当我希望它为1时返回0.当我用一个元素初始化向量时,会发生这种情况,但我可以访问第二个元素:
int main() {
vector <int> multiples(1, 4);
cout << multiples[1]; // 4
}
此外,当我尝试访问向量中不存在的元素时,我得到最右边元素的值(在本例中为4)。但我似乎无法获得第一个元素。任何人都可以解释原因吗?
答案 0 :(得分:4)
此
vector <int> multiples(1);
创建一个大小为1的int向量。单个元素是值初始化,ìnt
表示零初始化。所以你得到一个带有一个条目的向量,值为0
。这一个
vector <int> multiples(1, 4);
创建一个大小为1的向量,这次使用值4
。如果您尝试访问multiplies[1]
,则超出了size-1向量的范围,从而调用未定义的行为。你想初始化一个带有两个值1
和4
元素的向量,在C ++ 11中你可以这样做:
vector <int> multiples{1, 4};
答案 1 :(得分:1)
int main() {
vector <int> multiples(1);
cout << multiples[0];
}
http://cplusplus.com/reference/stl/vector/vector/
使用1个int元素创建vector,默认情况下初始化(即int()== 0)。
vector <int> multiples(1, 4);
创建带有1个由4初始化的int元素的向量。
cout << multiples[1]; // 4
这是不正确的,因为向量中只有一个元素。
答案 2 :(得分: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
}
答案 3 :(得分:0)
实际上,您不需要指定矢量的大小。 您可以根据需要添加元素(特定对象),这是向量的主要优势和用途。向元素添加元素可以通过以下方式轻松完成:
multiples.push_back(1);
multiples.push_back(4);
希望它有所帮助。