使用`std :: pair <int,int =“”>`C ++进行分段错误

时间:2016-09-24 20:02:39

标签: arrays c++11 c++14 stdvector std-pair

我正在使用std::vector std::pair<int, int>

std::vector< std::pair<int, int> > vec(n);

其中,nstd::vector的大小。

我正以这种方式接受stdin的输入:

for(int i=0; i<n; ++i) std::cin>>vec[i].first>>vec[i].second;

这样做,我遇到了分段错误。但是,如果我将我的代码更改为:

for(int i=0; i<n; ++i){
    int x, y;
    cin>>x>>y;
    vec[i] = std::make_pair(x, y);
}

它运作得很好。我无法弄清楚第一个有什么问题,因为它在我的电脑上使用小输入,但在大量随机输入上给出了一个SIGSEGV。此外,我使用vector的{​​{1}}替换array时也会遇到相同的行为。

此外,我在pair for vector上使用pair循环时遇到错误。如果我这样做:

for(int i=0; i<n; ++i){
    std::cout<<vec[i].first<<" "<<vec[i].second<<"\n"
}

但是,如果我将其更改为:

for(auto x: vec){
    std::cout<<x.first<<" "<<x.second<<"\n"
}

它运作得很好。这里的问题是什么?在哪里?

0 个答案:

没有答案