使用vector<pair<int,int>>时出现分段错误

为什么我的这个代码给出了segmentation fault?我无法找到我出错的地方,对我来说似乎很好。任何帮助都会很棒,谢谢。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    vector <pair<int,int>> v;
    
    int arr[5]={1,2,3,4,5};
    
    for(int i=0;i<5;i++)
    {
        v[i]={arr[i],i};
    }
    
    for(int i=0;i<5;i++)
    {
    cout<<v[i].first<<"n";
    
    }

}

回答

vector <pair<int,int>> v;初始化v为空vector,它不包含任何元素。然后在for循环中v[i]={arr[i],i};v[i].first导致UB。

您可以使用push_backemplace_back代替。

for(int i=0;i<5;i++)
{
    v.push_back({arr[i],i}); // add element to v
    // or
    // v.emplace_back(arr[i],i);
}

或者v预先制作包含5个元素。

vector <pair<int,int>> v(5); // initialize v as containing 5 elements
...
for(int i=0;i<5;i++)
{
    v[i]={arr[i],i};         // assignment on element
}


以上是使用vector&lt;pair&lt;int,int&gt;&gt;时出现分段错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>