【发布时间】:2013-04-01 04:58:26
【问题描述】:
我使用另一个库中的一个函数,该函数将任何 STL 顺序容器作为参数。只是为了争论,我将它保留为std::vector。
do_something (std::vector<double>& k)
{
...
}
我有一个完整的vector 数据(恰好是double 类型)有没有办法通过引用传递子向量,并且不复制和分割向量之前,这个功能?它通过复制直接进行(通过简单地复制 subvector,从函数返回 vector 并将相应的 subvector 放回 vector)。为什么?:
- 我不想复制的原因完全是因为速度,我会多次(我的意思是很多次)调用这个函数,性能是最重要的。
- 我不想事先拆分向量的原因是文件 IO 操作。顺序向量允许快速文件写入,尤其是在二进制模式下
换句话说,我可以做这样的事情吗(在下面的 pseudocode 示例中)?
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 程序员有任何帮助,我的向量将具有相同的大小和相同的预定位子向量,不等于来自 myVector.begin() 或 myVector.back()。对于那个向量,这也永远不会改变
【问题讨论】:
-
使用迭代器,或者如果你想要更好的语法,使用类似boost::adaptors::sliced的东西。
标签: c++ function vector arguments