gpt4 book ai didi

c++ - 将指针传递给 vector 是否比 vector 本身更快?

转载 作者:行者123 更新时间:2023-12-05 00:53:03 25 4
gpt4 key购买 nike

在我的程序中,我有一个将多个 vector 作为参数的函数。我曾经将它们作为法线 vector 传递,所以函数的定义是这样开始的:

void do(std::vector<int> a, std::vector<int> b, std::vector<int> c){

调用看起来像这样:

do(d, e, f);

但我希望我的代码尽可能快,所以我想知道是否不传递 vector 而是传递指向 vector 的指针会更快。所以函数的定义看起来像这样:

void do(std::vector<int> *a, std::vector<int> *b, std::vector<int> *c){

还有这样的调用:

do(&d, &e, &f);

此更改是否会对性能产生影响?如果是:正面或负面,如果我的 vector 只包含 3 个元素,会有很大的不同吗?

最佳答案

考虑 C++ 核心指南 F.16: For “in” parameters, pass cheaply-copied types by value and others by reference to const .

什么是便宜的,什么是通过拷贝传递的昂贵取决于一些因素。一个好的经验法则是传递任何与指针一样大或更小的值,以及任何更大的引用。 std::vector 当然最好通过 const 引用而不是复制。

当传递 nullptr 是有效参数时,您应该只传递指针而不是引用。当调用者应该总是传递一个 vector 而不是一个 vector 时,那么你应该更喜欢引用而不是指针。引用不能为空,它们总是引用一个对象。


请注意,有时当函数复制参数时,避免复制是没有意义的。考虑:

 void foo(const std::vector<int>& a) { 
auto copy = a;
// ...
}

然后用

 void foo(std::vector<int> a) {
// a is already a copy
// ...
}

更明显的是该函数正在复制,而通过引用传递没有保存任何内容。

关于c++ - 将指针传递给 vector 是否比 vector 本身更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68578004/

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