提问者:小点点

CPP中vector的默认初始值设定项是什么(或者如何设定)?


有这样的:

#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; 

而不进行初始化。 我知道我可以使用指针,在那里我不必初始化它,但我想使用引用。 有没有一种方法为那个向量进行默认初始化,或者我唯一的选择是使用指针?


共2个答案

匿名用户

标准要求初始化引用,所以不,编译器不会让你让它不初始化。 实际上,您正在尝试使用并返回对任何东西的引用,相反,您应该就地处理函数参数vec,或者创建一个局部变量并返回值vector; ret。 记住将返回类型更改为vector,返回对局部变量的引用会导致未定义的行为。 您可以依赖返回值优化。

匿名用户

我看不出这有什么好处,但是您可以使用statice向量来初始化它,以避免在函数执行后引用已删除的向量,如下所示

auto static staticVec = std::vector<Info>{};
vector<Info> &ret = staticVec;