将向量作为参数传递并使用它,为什么会崩溃?

6

我对C++和STL都比较陌生。我试图将一个向量作为参数传递给一个函数,但这导致了程序崩溃。我正在使用Code::Blocks和MingW。以下是一个简单的代码示例。

#include <iostream>
#include <vector>

using namespace std;

void foo(const vector<int> &v)
{
    cout << v[0];
}
int main(){
    vector<int> v;
    v[0] = 25;
    foo(v);
return 0;
}

谢谢!

1个回答

6

这个程序崩溃是因为你在使用v[0]时越过了向量的末尾——这是未定义行为。如果你没有进行任何操作,它的初始大小为0。(虽然你在那之后读取了同样的内容,但所有的投注都已经破产了)。

你可能想要这样做:

vector<int> v;
v.push_back(25);
foo(v);

也许是这样:
vector<int> v(1);
v.at(0) = 25;
foo(v);

如果你使用 v.at(n) 而不是 [] 操作符,你会得到异常抛出而不是未定义行为。


谢谢!我应该学习更多关于STL的知识。我把vector当作一个简单的数组,这显然是错误的! - Physer
@Physer - 向量在许多方面与数组相似。读取超出向量结尾的数据与读取超出数组结尾的数据一样好或不好。 - Flexo
我明白你的意思。这是我正在工作的一个更大代码的摘录。最初,我给向量分配了大小v(100),并使用循环填充它,例如v [i] = value; ... - Physer
通常摘录的问题是,你得到了一个与你想要回答的问题不同的答案。请发布真正的代码。 - jahhaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接