为什么对的向量不存储输入?

问题描述:

我已经开始学习C++ 11 STL。我使用Kali Linux 2.0。 我刚刚写了这个简单的代码。但是这并没有给出预期的产出。似乎向量v不接受值。为什么对的向量不存储输入?

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <stdlib.h> 
#include <algorithm> 
#include <vector> 
#include <utility> 
using namespace std; 

int main() 
{ 
    int n; 
    cin >> n; 
    vector< pair<int,int> > v(n); 
    for(int i=0;i<n;i++) 
    { 
     int n1, n2; 
     scanf("%d %d", &n1, &n2); 
     v.emplace_back(n1,n2); 
     cout << v[i].first << " " << v[i].second << endl; 
    } 
} 

请告诉我我哪里错了。 每次我在循环中输入一些值给n1和n2,它会给出相同的输出:0 0.为什么v [i] .first和second被评估为0?

“在矢量的末尾插入一个新元素,紧接其当前最后一个元素。”http://www.cplusplus.com/reference/vector/vector/emplace_back/

您已经预先生成的N矢量元素,因此新的一个被放置在N + i和i的输出是默认的0,0

更换线

vector< pair<int,int> > v(n); 

vector< pair<int,int> > v; 

http://cpp.sh/7umd

现场演示210
#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <stdlib.h> 
#include <algorithm> 
#include <vector> 
#include <utility> 
using namespace std; 

int main() 
{ 
    int n; 
    cin >> n; 
    vector< pair<int,int> > v1(n); // original code with pre-allocated defaule elements 
    vector< pair<int,int> > v2;  // fixed code, no pre-creation of elements 
    for(int i=0;i<n;i++) 
    { 
     int n1, n2; 
     scanf("%d %d", &n1, &n2); 
     v1.emplace_back(n1,n2); 
     v2.emplace_back(n1,n2); 
     cout << "v1 "<< v1[i].first << " " << v1[i].second << endl; 
     cout << "v2 "<< v2[i].first << " " << v2[i].second << endl; 

     cout << "v1 " << endl; 
     for(auto p : v1) 
     { 
      cout << p.first <<" " << p.second << endl; 
     } 
     cout << "v2 " << endl; 
     for(auto p : v2) 
     { 
      cout << p.first <<" " << p.second << endl; 
     } 
    } 
} 
+0

谢谢你差别很大,先生。 –