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

问题描述 投票:0回答:1

我已经开始学习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?

c++ vector stl
1个回答
2
投票

“在向量的末尾插入一个新元素,紧跟在当前最后一个元素之后。” 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现场演示

#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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.