簡體   English   中英

cpp中向量的默認初始化程序是什么(或如何制作)?

[英]What is (or how to make) default initializer for vector in cpp?

有這個:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct Info{
    string word;
    unsigned int i;
};

vector<Info> &orig(vector<Info> &vec){
    vector<Info> &ret; //reference needs to be initialized, pointer does not have to
    size_t len = vec.size();

    for(int i=0; i<len; i++){
       int j = 0; 
        for(; j<len; j++){
            if(vec[i].word == vec[j].word){
                vec[i].i++;
                break;
            }
        }
        if(j=len){
            Info info{vec[i].word, 0};
            ret.push_back(info);
        }
    }
    return ret;
}

int main(){
    vector<Info> words, origs;
    string tmp;

    while(cin >> tmp){
        Info info{tmp, 0};
        words.push_back(info);
    }

    origs=orig(words);

    cout << "number of elements of vector: " << words.size() << ", of which are unique: ";
    for(int i=0; i<origs.size(); i++){
        cout << origs[i].word << endl;
    }
}

我正在使用這條線:

vector<Info> &ret; 

沒有初始化。 我知道我可以使用指針,我不必初始化它,但我想使用引用。 有沒有辦法為該向量進行默認初始化,或者是我使用指針的唯一選擇?

該標准要求對引用進行初始化,所以不,編譯器不會讓你讓它未初始化。 您實際上是在嘗試使用並返回對任何內容的引用,相反,您應該在 function 參數vec上就地工作,或者創建一個局部變量並返回值vector<Info> ret 請記住將返回類型更改為vector<Info> ,返回對局部變量的引用會導致未定義的行為。 您可以依靠返回值優化。

暫無
暫無

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

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