我正在使用std::vector
std::pair<int, int>
。
std::vector< std::pair<int, int> > vec(n);
其中,n
是std::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"
}
它运作得很好。这里的问题是什么?在哪里?