Boost向量与STL向量的比较

14

boost::numeric::ublas::vectorstd::vector在运行效率方面如何比较?

我能否安全地假设,只需编写以下内容,即可将整个程序从使用std::vector转换为使用boost::numeric::ublas::vector

#include <boost/numeric/ublas/vector.hpp>
using namespace boost::numeric::ublas;

我可以使用boost向量代替STL向量吗?在所有方面都像STL向量一样使用它们吗?

来自<algorithm>的函数是否适用于boost向量?它们使用相同的迭代器吗?

它们适用于C++0x吗?它们适用于基于范围的循环吗?


std::vector有什么问题吗? - Nim
2个回答

24

这些是完全正交的数据类型:前者表示“向量”的代数定义(一维矩阵),而后者表示计算机科学中“向量”的定义(一维数组)。

它们不能相互比较。


天哪!我搜索了整个世界,想知道为什么 boost 向量里面没有 push_back。。:) - Kashyap
注意:STL算法仍然有效。您可以通过将plus_assign等函数包装到lambda中来使用算术运算。http://www.boost.org/doc/libs/1_51_0/boost/numeric/ublas/functional.hpp - kirill_igum

10

如果您想进行线性代数操作,例如矩阵向量乘法等,应仅使用ublas :: vector。它们不提供与std :: vector相同的功能或相同的接口。就运行时效率而言,据我所知,没有什么能超过std :: vector。


真的吗?因为我相信像std :: list这样的链接列表在插入和删除元素方面要比vector更好。:p - wheaties
@wheaties 我也这样想,但惊讶地发现向量即使在那种情况下大多数情况下也很好。 - Oleh Prypin
1
这真的取决于大小。在巨大的std::vector中间插入应该比在同样巨大的std::list中间插入要慢得多。 - juanchopanza
请查看BlaXpirit所说的这里的证据/基准。当然,大小是重要的元素。 - rubenvb
2
@rubenvb:公平地说,那是使用于MSVC 5进行基准测试的,该版本发布于1997年2月,不算是最新版本。;-] - ildjarn
对于在容器末尾逐个插入项目,在我的Ubuntu笔记本电脑上,没有任何大小使list<int>优于vector<int>。对于在容器开头插入项目,即使是适度的(约5000),list<int>的性能也明显优于vector<int> - Robᵩ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接