继承我的代码问题是,当我尝试通过函数写一个全局向量时,prog抛出异常
//global elements
vector <int> par;
int t = 0;
void fun(int V)
{
for(int i = 0; i < V ; ++i)
par.at(i) = i ;
}
int main()
{
int V;
cin >> V;
par.reserve(V);
for(int i = 0 ; i < V ; ++i)
par[i] = i;
//following code fails to print anything??
for(auto it : disc) cout<<it<<' '<<"hello";
//this throws exception
fun(V);
}
答案 0 :(得分:2)
问题是虽然std::vector::reserve
为扩展保留了内存,但它实际上并没有增加向量的大小。这意味着当你这样做时par[i] = i
您正在索引超出向量的范围,从而导致undefined behavior。
您仍然必须使用push_back
添加元素。
还有另一个解决方案,并为全局向量分配另一个正确大小的向量,您可以在constructor中设置大小:
std::cin >> v;
par = std::vector<int>(v);
上面创建了一个包含v
条目的临时向量,并在临时向量被破坏之前将向量复制到par
。