检查向量的可用性(性能问题)

Posted

技术标签:

【中文标题】检查向量的可用性(性能问题)【英文标题】:checking a vector for its availability (performance issue) 【发布时间】:2013-04-19 10:57:45 【问题描述】:

我想检查一个向量,看看它是否至少有一个元素。哪个更快?

if (vec.size()) 
  ...

if (vec) 
  ...

有没有更好的解决方案?

【问题讨论】:

vector::empty(). “if(vec)”真的有效吗?! 后者无法编译,vector 没有隐式转换为布尔上下文中可接受的任何内容。 (@Kamouth:不,不是) 无论如何,任何方式都可能超快。但是!std::vector::empty() 清楚地表明了您的意图,因此是最佳选择。 同意,并且在某些容器上,empty() 实际上会更快,并且随着程序的发展更改容器的类型并不少见。 【参考方案1】:

只使用vector::empty,因为它专门用于此特定任务。

  std::vector<int> myvector;

  for (int i=1;i<=10;i++) myvector.push_back(i);

  while (!myvector.empty())
  
     sum += myvector.back();
     myvector.pop_back();
  

【讨论】:

以上是关于检查向量的可用性(性能问题)的主要内容,如果未能解决你的问题,请参考以下文章

性能检查工具

生产中的 STL 向量和 Boost 多阵列 [重复]

巨大的性能下降 - 向量问题?

使用 Cuda 进行 128 位向量加法,性能问题

高性能程序,啥是更好的向量数组或向量向量

标准向量性能/替代