gpt4 book ai didi

c++ - 访问 C++ 容器中元素的最有效方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:25:03 25 4
gpt4 key购买 nike

假设我想顺序访问 C++ 容器中的所有元素,哪种方式最有效?我在以下示例中说明了我的问题:

std::vector<int> abc;
abc.push_back(3);
abc.push_back(4);
...
...

for(int i=0; i<abc.size(); i++)
{
abc[i];
}

std::vector<int>::iterator it = abc.begin();
std::vector<int>::iterator itEnd = abc.end();
while(it != itEnd)
{
(*it);
it++;
}

在这个例子中,如您所见,使用了两种方法来访问 C++ 容器中的元素,因此一个自然的问题是哪种方法效率更高。谢谢。

最佳答案

解决这些问题的最佳方法是执行 100 万次循环并对其进行测试。编译器各不相同。确保在 Release模式下对其进行测试。

我使用 ACE,但这是我如何获取时差的示例。

  // Log how long each module takes.
ACE_Time_Value lSendStart;
ACE_Time_Value lDifference;

// Start keeping track of how long this takes
lSendStart = ACE_OS::gettimeofday();

// Figure out how long we took.
lDifference = ACE_OS::gettimeofday() - lSendStart;
// Log how long we took
PLALOG_INFO( mLogger, ACE_TEXT( "doProcessing took ") <<lDifference.sec () << ACE_TEXT( "seconds(s) and ") << (lDifference.usec ()) <<
ACE_TEXT(" micro second(s) to process." ), "" );

所以获取开始时间,循环一百万次,得到差异,然后以另一种方式执行相同的循环。

我发现的另一件事是,如果您可以使用 c++11 中的 auto,您通常会发现比您所展示的历史性 for 循环更快的循环。

   std::vector<std::string> lNameList; 
// fill in vector
for(auto& lSection : lNameList)
{
// lSection is not a string
// DO something with it

}

关于c++ - 访问 C++ 容器中元素的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081312/

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