gpt4 book ai didi

C++: vector 中的子 vector 作为函数的参数

转载 作者:行者123 更新时间:2023-11-30 04:19:36 25 4
gpt4 key购买 nike

我使用另一个库中的函数,该函数将任何 STL 顺序容器作为参数。为了论证,我将其保留为 std::vector

do_something (std::vector<double>& k)
{
...
}

我有一个完整的 vector 数据(恰好是 double 类型) 和手前分割 vector ,这个功能?它通过复制直接向前(通过简单地制作 subvector 的拷贝,从函数返回 vector 并将相应的 subvector 放回 vector )。为什么?:

  1. 我不想复制的原因完全是因为速度,我会多次(我的意思是多次)调用此函数,性能是最重要的。
  2. 我不想事先拆分 vector 的原因是文件 IO 操作。顺序 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 程序员有任何帮助,我的 vector 将具有相同的大小和相同的预置子 vector ,该子 vector 不等于 from myVector.begin()myVector.back()。同样,对于那个 vector ,这永远不会改变

最佳答案

不,这是不可能的。这就是标准算法接受两个(或更多)迭代器而不是容器作为参数的原因。

您还可以查看 Boost.Range 库,它允许范围适配器包括切片。

根据您调用的函数模板中的内容,您可能能够传递一个切片范围来代替序列,因为 Boost 中定义的具体范围确实有 begin() end() 成员函数。但由于它需要对容器的非常量引用,因此它有可能添加或删除元素,在这种情况下你就不走运了。

关于C++: vector 中的子 vector 作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737844/

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