在全局向量<int> </int>上写

时间:2014-07-24 12:46:26

标签: c++ vector

继承我的代码问题是,当我尝试通过函数写一个全局向量时,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);
}

1 个答案:

答案 0 :(得分:2)

问题是虽然std::vector::reserve为扩展保留了内存,但它实际上并没有增加向量的大小。这意味着当你这样做时par[i] = i您正在索引超出向量的范围,从而导致undefined behavior

您仍然必须使用push_back添加元素。


还有另一个解决方案,并为全局向量分配另一个正确大小的向量,您可以在constructor中设置大小:

std::cin >> v;
par = std::vector<int>(v);

上面创建了一个包含v条目的临时向量,并在临时向量被破坏之前将向量复制到par