gpt4 book ai didi

c++ - 如何在 C++ 中创建一个全局 vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:59 26 4
gpt4 key购买 nike

所以,我有这个问题。我有两个对象,我需要比较每个对象的数据,问题是,当我调用一个函数时,我必须发送它们两个,但我的老师要我这样做,这样我就可以将任何对象发送给它, 并且 vector 将得到更新,而不是重新创建。当前函数:

    vector <Muziejus> atrinktiTinkamus(Bakalauras A, Bakalauras B, string R, int m)
{
vector <Muziejus> X;
for (int i = 0; i < A.imtiK(); i++){
if (A.imtiEksponata(i).imtiRusi() == R && A.imtiEksponata(i).imtiKAmz() > m){
X.push_back(A.imtiEksponata(i));
}
}
for (int i = 0; i < B.imtiK(); i++){
if (B.imtiEksponata(i).imtiRusi() == R && B.imtiEksponata(i).imtiKAmz() > m){
X.push_back(B.imtiEksponata(i));
}
}
return X;
}

如您所见,我发送了两个对象,将它们放入循环中,得到我想要的,然后将 vector 发回。尽管我需要的是,它是通用的,就像我发送一个对象,当前 vector 更新,然后返回,冲洗并重复。我该怎么做?

最佳答案

您的代码几乎是惯用的 C++11 风格,如果您只是将其更改为传递大型类型,例如 ABRconst&

vector <Muziejus> atrinktiTinkamus(Bakalauras const& A, Bakalauras const& B, string const& R, int m)
{
vector <Muziejus> X;

// code reading from A and B, writing to X

return X; // moved, not copied in C++11
}

auto someX = atrinktiTinkamus(someA, someB, someR, someM);

你的老师似乎希望你使用像这样通过引用传递的 C++98 风格的“输出参数”:

void // no return type
atrinktiTinkamus(
Bakalauras const& A, Bakalauras const& B, string const& R, int m,
vector<Muziejus>& X // by reference
)
{
// code reading from A and B, writing to X
}

vector<Muziejus> someX;
atrinktiTinkamus(someA, someB, someR, someM, someX);

如果您不重用 someX 变量,那么 C++11 风格会更短和惯用。但是,如果您可以重用 someX(尤其是 std::vector 的动态分配内存),那么使用 C++98 可以提高性能风格。

注意:为了完整性,甚至还有第三种风格(实际上是第二种风格的变体),它使用指针而不是引用

void // no return type
atrinktiTinkamus(
Bakalauras const& A, Bakalauras const& B, string const& R, int m,
vector<Muziejus>* X // by pointer
)
{
// code reading from A and B, writing to X
}

vector<Muziejus> someX;
atrinktiTinkamus(someA, someB, someR, someM, &someX);

根据一些风格指南(例如 Google),传递变量的地址(在本例中为 &someX)可以更容易地从调用站点发现变量正在被修改一个函数。

关于c++ - 如何在 C++ 中创建一个全局 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com