我有一种情况,我有 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 算法一样采用迭代器,然后您可以提供合适的 begin
和 end
迭代器。
像 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/