簡體   English   中英

為什么我不能像這樣插入對值? v.push_back(矢量<pair<int,string> &gt;({1,"A"}));? </pair<int,string>

[英]Why I can't insert the pair value like this? v.push_back(vector<pair<int,string> >({1,"A"}));?

我已經寫了這段代碼,想像這樣在 vector of vector 中插入值: v.push_back(vector<pair<int,string> >({1,"A"})); ??
但是它顯示錯誤......

在此代碼中插入空值有效。 但我想知道為什么這不可能??

#include<bits/stdc++.h>
using namespace std;

void printVec(vector<pair<int,string> > &v){
    cout << "Size: " << v.size() << endl;
    for(int i=0; i<v.size(); i++)
    {
        cout << v[i].first << " " << v[i].second << endl;
    }
}

int main()
{
    vector<vector<pair<int,string> > > v;

    int N;
    cin >> N;
    for(int i=0; i<N; i++)
    {
        int n;
        cin >> n;
        v.push_back(vector<pair<int,string> >({}));
        for(int j=0; j<n; j++)
        {
            int x;
            string s;
            cin >> x >>s;
            v[i].push_back({x,s});
        }
    }

    v.push_back(vector<pair<int,string> >({})); // UNABLE TO STORE A PAIR AT THE END. ONLY CAN ADD EMPTY PAIR. DON'T KNOW WHY??
    // v.push_back({}); // USING ANY OF THEM

    for(int i=0; i<v.size(); i++)
    {
        printVec(v[i]);
    }
}

我想在 pair<int, string> 類型的向量的向量末尾插入一個值。 使用這個:- v.push_back(vector<pair<int,string> >({1,"A"}));

但它顯示錯誤。

使用時:-

v.push_back(vector<pair<int,string> >({}));

它工作正常。 請解釋為什么??

在這里,您推的是一對而不是一對向量。

v.push_back(vector<pair<int,string> >({1,"A"}));

這是可行的,因為它將 ({}) 視為成對的空向量。 `

v.push_back(vector<pair<int,string> >({}));`

盡管以下將起作用:

vector<pair<int,string> > temp;
temp.push_back({1, "Hi"});
v.push_back(vector<pair<int,string> >({temp}));

如果你想用{1,"A"}作為std::initializer_list構造函數的一個元素的初始化器來列表初始化你的向量,你需要使用大括號,而不是圓括號:

vector<pair<int,string>>{{1,"A"}}

或者,如果您不確定如何直接使用向量中的元素進行初始化,或者您還沒有學到上述內容,只需定義一個變量來臨時保存您想要推入v的內部向量,推入對元素放入其中,然后使用該變量。 那么你不必猜測任何東西:

vector<pair<int,string>> inner;
inner.push_back({1,"A"});
 
v.push_back(inner); // alternatively `std::move(inner)` if `inner` is not used later

vector<pair<int,string> >({})起作用是因為{}參數可以將std::initializer_liststd::initializer_liststd::vector的構造函數直接為空。 在您最初的嘗試中,一組額外的大括號也會以同樣的方式工作,盡管那樣括號會是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM