C++ c++;避免复制的向量连接器

C++ c++;避免复制的向量连接器,c++,vector,C++,Vector,我有两个向量: vector<char> v1 = {1,3,4} vector<char> v2 = {4,5,6} 在这一点上,它永远不会被再次使用 现在,很明显,有很多方法可以简单地创建一个新对象并传递它,但是正如我所说的,向量很大,“绝对的函数”非常快,所以这显然不是理想的 我想制作一个这样的物体: template<class T> class AmIAVector{ AmIAVector(const T& vec_1, const

我有两个向量:

vector<char> v1 = {1,3,4}
vector<char> v2 = {4,5,6}
在这一点上,它永远不会被再次使用

现在,很明显,有很多方法可以简单地创建一个新对象并传递它,但是正如我所说的,向量很大,“绝对的函数”非常快,所以这显然不是理想的

我想制作一个这样的物体:

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'}
}
模板
类AmIAVector{
AmIAVector(常数T&vec_1、常数T&vec_2)
自动运算符[](int i)常量{返回'vec1或vec2'的索引}
}

但是有没有更好的方法来解决这个问题呢?有几种可能的解决办法

因为
绝对地\u awesome\u函数
专门获取一个向量,所以您被卡住了

通过重新设计,它可以像大多数stl算法那样使用迭代器,然后您可以提供合适的
begin
end
迭代器

像boost::join这样的东西就行了

boost::join(v1, v2)
相关问题: stackoverflow.com/questions/981186/chain-iterator-for-c或

允许:

const std::vector<int> v1{4, 8, 15};
const std::vector<int> v2{16, 23, 42};
const auto view = ranges::view::concat(v1, v2);

for (const auto& e : view) {
    std::cout << e << " ";   
}
std::cout << std::endl;
std::cout << view[5] << std::endl;
const std::vector v1{4,8,15};
常数std::向量v2{16,23,42};
const auto view=ranges::view::concat(v1、v2);
用于(常数自动和e:视图){

std::cout
template
:我会因为我的同事做了这样的事情而责骂他们……也许
绝对很棒的函数
应该像大多数stl算法一样使用迭代器,那么你可以提供合适的开始和结束迭代器。像
boost::join
这样的东西可能也很好:,或者@torbjorn它只是为了清晰起见,所以我想做一个例子n回答,我就接受。ty@Torbjörn-不需要打任何人的耳光。编译器会为您做这件事。即使在这种情况下,OP也不会真的卡住。在迭代器对上提供一个带有
操作符[]
的包装器很简单。基本上是一个连接范围;我相信它们也在Boost中。
boost::join(v1, v2)
const std::vector<int> v1{4, 8, 15};
const std::vector<int> v2{16, 23, 42};
const auto view = ranges::view::concat(v1, v2);

for (const auto& e : view) {
    std::cout << e << " ";   
}
std::cout << std::endl;
std::cout << view[5] << std::endl;