如何在 C++ 中创建全局向量
How to create a global vector in c++
所以,我有这个问题。我有两个对象,我需要比较每个对象中的数据,问题是,当我调用一个函数时,我必须发送它们两个,但我的老师希望我制作它,以便我可以向它发送任何对象,并且向量将得到更新,而不是重新创建。当前功能:
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;
}
如您所见,我发送两个对象,将它们放在循环中,得到我想要的东西,然后发回向量。虽然我需要的是,为了让它是通用的,就像我发送一个对象一样,当前的矢量更新,然后返回,冲洗并重复。我该怎么做?
你的代码几乎是惯用的C++11风格,如果你只是改变它来传递大型类型,如A
,B
和R
const&
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 样式的"out-parameters",如下所示:
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);
根据一些风格指南(例如谷歌),变量地址的传递(在这种情况下&someX
)使得当变量被函数修改时更容易从调用站点发现。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 为队列创建C 全局变量
- 如何在C++中创建"全局"实例?
- 如何在 C++ 中创建全局向量
- 如何为多线程应用程序创建全局对象
- C++如何创建"全局"库
- 我是否可以在类似于 C# 的 C++ 中创建全局命名空间层次结构,以帮助开发人员使用我们的代码?
- 如何在cuda上创建全局可访问的变量
- 创建全局常量C字符串的正确方法
- 在 llvm 中创建全局变量时出错
- 如何创建全局处理 Win+<some 键>组合的应用?
- 在函数C++中创建全局变量
- 如何为所有类型的整数值类型创建全局类型,并在C++中了解它们的类型
- 从C++源文件创建全局变量列表
- 使用LLVM IR Builder创建全局矢量
- 使用名称空间创建全局函数,但得到多个定义的符号错误
- 在函数内部创建全局动态数组
- 使用它来创建全局钩子时,我应该在 DLL 中放入什么