2016-02-27 3 views
0

Я начал изучать 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] .первый и второй оцениваются до 0 ??

ответ

2

«Вставляет новый элемент в конец вектора, сразу после его текущего последнего элемента».http://www.cplusplus.com/reference/vector/vector/emplace_back/

Вы предварительно создали п векторных элементов, так что ваш новый помещается в п + я и выход I по умолчанию 0,0

Заменить строки

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

с

vector< pair<int,int> > v; 

Живая демонстрация на http://cpp.sh/7umd

#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

Спасибо, что вам многое изменилось, сэр. –

Смежные вопросы