Search code examples
c++vectorstd-pair

Segmentation fault while using vector<pair<int,int>>


Why this code of mine is giving segmentation fault? I am not able to get where I am going wrong, to me it seems fine. Any help will be great, thank you.

#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";
    
    }

}

Solution

  • vector <pair<int,int>> v; initializes v as an empty vector, it contains no elements. Then in for loops v[i]={arr[i],i}; and v[i].first lead to UB.

    You could use push_back or emplace_back instead.

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

    Or make v containing 5 elements in advance.

    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
    }