我使用另一个库中的函数,该函数将任何STL顺序容器作为参数。为了论证,我会将其保留为std::vector
。
do_something (std::vector<double>& k)
{
...
}
我有一整个vector
数据(恰好是double
类型)是否有办法优先通过引用传递子向量,无需复制和手前分裂矢量,到这个功能?它是直接通过复制(只需复制子向量,从函数返回vector
并将相应的子向量放回vector
)。为什么:
换句话说,我可以做这样的事情(在下面的伪代码中)吗?
std::vector<double> myVector{1.2, 5.6, 8.6, 2.2, 1.7, 9.1}; // myVeector of size 6
do_something (&myVector[ -- elementss 2,3,4--]);
任何帮助都会受到赞赏,即使这是不可能的,并且您知道如何有效地来回复制
注意:如果对SO程序员有任何帮助,我的矢量大小与相同的prelocated子矢量大小相同,不等于myVector.begin()
或myVector.back()
。对于那个矢量
答案 0 :(得分:2)
不,它无法完成。这就是标准算法接受两个(或更多)迭代器作为参数而不是容器的原因。
您还可以查看Boost.Range库,它允许包括切片的范围适配器。
根据您调用的此函数模板中的内容,可能能够传递切片范围来代替序列,因为Boost中定义的具体范围确实有begin()
和end()
个成员函数。但是因为它需要对容器进行非const引用,所以它有可能添加或删除元素,在这种情况下你运气不好。