gpt4 book ai didi

C++ - 循环效率 : Storing temporarly values of a class member Vs pointer to this member

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

在类方法中,我正在访问私有(private)属性 - 或嵌套类的属性。此外,我正在遍历这些属性。

我想知道在时间(和内存)方面最有效的方法是什么:

  • 复制属性并在循环内访问它们
  • 访问循环内的属性
  • 或者可能在属性上使用迭代器

我觉得我的问题与:Efficiency of accessing a value through a pointer vs storing as temporary value 有关.但就我而言,我只需要访问一个值,而不是更改它。

示例

给定两个类

class ClassA
{
public:
vector<double> GetAVector() { return AVector; }

private:
vector<double> m_AVector;
}

class ClassB 
{
public:
void MyFunction();

private:
vector<double> m_Vector;
ClassA m_A;
}

我。我应该做什么:

1.

void ClassB::MyFunction()
{
vector<double> foo;
for(int i=0; i<... ; i++)
{
foo.push_back(SomeFunction(m_Vector[i]));
}
/// do something ...
}

2.

void ClassB::MyFunction()
{
vector<double> foo;
vector<double> VectorCopy = m_Vector;
for(int i=0; i<... ; i++)
{
foo.push_back(SomeFunction(VectorCopy[i]));
}
/// do something ...
}

3.

void ClassB::MyFunction()
{
vector<double> foo;
for(vector<double>::iterator it = m_Vector.begin(); it != m_Vector.end() ; it++)
{
foo.push_back(SomeFunction((*it)));
}
/// do something ...
}

II. 如果我不是在 m_vector 上循环而是在 m_A.GetAVector() 上循环怎么办?

附言:我在浏览其他帖子时了解到,一开始进行“微”优化没有用,但我的问题更多地与实际发生的事情和应该做的事情有关——关于标准(和编码风格)

最佳答案

您很幸运:您实际上可以自己找出答案,方法是在您的编译器和操作系统上尝试每种方法,并对每种方法进行计时以查看需要多长时间。

这里没有适用于距太阳第三颗行星上存在的所有可以想象的 C++ 编译器和操作系统的通用答案。每个编译器和硬件都不同,并且具有不同的运行时特性。即使是同一编译器的不同版本也经常会导致可能影响性能的不同运行时行为。更不用说各种编译和优化选项了。由于您甚至没有指定您的编译器和操作系统,因此这里实际上无法给出权威的答案。

虽然对于某些此类问题确实可以高度确定地实现最佳实现,但对于大多数用例而言,这不是其中之一。获得答案的唯一方法是自己找出答案,方法是亲自尝试每个备选方案、分析和比较结果。

关于C++ - 循环效率 : Storing temporarly values of a class member Vs pointer to this member,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37835399/

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