C++ vector 连接器以避免复制

标签 c++ vector

我有一种情况,我有 2 个 vector :

vector<char> v1 = {1,3,4}
vector<char> v2 = {4,5,6}

实际上可以变得非常大。

这些 vector 的要求是它们都被传递到带有签名的函数中:

template<class supports_[]_operator>
double absolutely_awesome_function(const supports_[]_operator& v)

但是,我还需要将连接 vector 传递给此函数。

v3= {1,3,4,4,5,6}

此时它再也不会被使用。

现在,显然有很多方法可以简单地创建一个新对象并将其传递进去,但是正如我所说, vector 很大并且“absolutely_awesome_function”非常快,所以这显然不理想。

我想过制作一个像这样的对象:

template<class T>
class AmIAVector{
    AmIAVector(const T& vec_1, const T& vec_2)

    auto operator [](int i) const    {return 'an index into either vec1 or vec2'}
}

但是有没有更好的方法/是否已经存在这样的东西

最佳答案

对此有几种可能的解决方案。

由于 absolutely_awesome_function 专门采用 vector ,因此您陷入困境。

通过重新设计,它可以像大多数 STL 算法一样采用迭代器,然后您可以提供合适的 beginend 迭代器。

像 boost::join 这样的东西就可以工作。

boost::join(v1, v2)

相关问题: stackoverflow.com/questions/981186/chain-iterator-for-c,或 Writing an iterator that makes several containers look as one

关于C++ vector 连接器以避免复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039740/

相关文章:

c++ - 如何决定 constexpr 是否返回引用

c++ - 如何对 float 的多维 vector 进行排序?

string - R:将数据框行转换为字符向量

c++ - 将 Vector<int> 转换为字符串

c++ - 静态类成员在动态库中与主应用程序不同

c++ - 按平台划分的 CMake 输出目录

c++ - 迭代器和 const_iterator operator++ post and prefix

c++ - 这个 typedef 定义是什么意思?

c++ - 将 vector 复制到数组?

c++ - 如何在循环中迭代两个 vector