gpt4 book ai didi

函数中的 C++ 指针和引用

转载 作者:行者123 更新时间:2023-11-30 05:11:25 26 4
gpt4 key购买 nike

我从 C#/Java 背景转为 C++,使用 visual studio community 2017 和大量教程。我到了不确定编写处理数据 vector 的函数的正确方法的地步。我应该强制函数使用指针/引用吗?我应该让编译器解决它吗?什么是最佳实践?

这是我的主程序,我要求输入 vector 大小,然后将指向整数值的指针传递给函数,该函数通过一个简单的 for 循环创建并用值填充 vector 。然后我将该数组传递给另一个执行随机播放的函数。

vector<int> intVector(int* count)
{
vector<int> vi;
for (int i = 1; i <= *count; i++)
vi.push_back(i);
return vi;
}

vector<int> &randVector(vector<int> *v)
{
shuffle(v->begin(), v->end(), default_random_engine());
return *v;
}

int _tmain(int argc, _TCHAR* argv[])
{
int count;
cout << "Enter vector array size: ";
cin >> count; cout << endl;
cout << "Vector of integers: " << endl;
vector<int> vi = intVector(&count);

for_each(vi.begin(), vi.end(), [](int i) {cout << i << " ";});
cout << endl;
vi = randVector(&vi);
cout << "Randomized vector of integers: " << endl;
for_each(vi.begin(), vi.end(), [](int i) {cout << i << " ";});
cout << endl;

return 0;
}

所以我的问题是,在我的案例中避免不必要的复制的最佳做法是什么。我应该关心它吗?我应该依靠编译器为我解决它吗?

我打算使用 C++ 在桌面和游戏机上开发游戏。了解内存和性能管理对我来说很重要。

最佳答案

您负责强制(或避免)周围对象的拷贝。

关于你的例子:

  • 您可以避免使用指针,而是使用reference

如下所示:

vector<int>& randVector(vector<int>& v)
{
shuffle(v->begin(), v->end(), default_random_engine());
return v;
}

请注意,由于您使用的是引用,因此随机播放操作已经在修改 randVector 的参数,因此没有必要返回对它的引用。

根据经验,当你需要传递一个对象并且你想避免一个可能很昂贵的拷贝时,你可以使用引用:

void function(<const> Object& v)
{
// do_something_with_v
}

关于函数中的 C++ 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016947/

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