是否有一种方法可以将vector构造为2 vectors的连接(除了创建助手函数之外)?
例如:
const vector<int> first = {13};
const vector<int> second = {42};
const vector<int> concatenation = first + second;我知道vector没有像string这样的加法运算符,但这正是我想要的行为。因此concatenation将包含: 13和42。
我知道我可以像这样初始化concatenation,但是它阻止了我创建concatenation const
vector<int> concatenation = first;
first.insert(concatenation.end(), second.cbegin(), second.cend()); 发布于 2016-02-18 15:59:07
不,如果你要求
const。发布于 2016-02-18 15:55:54
template<typename T>
std::vector<T> operator+(const std::vector<T>& v1, const std::vector<T>& v2){
std::vector<T> vr(std::begin(v1), std::end(v1));
vr.insert(std::end(vr), std::begin(v2), std::end(v2));
return vr;
}这确实需要一个助手“函数”,但至少它允许您将其用作
const vector<int> concatenation = first + second;发布于 2016-02-18 15:45:59
我觉得你得写个帮助函数。我会写成:
std::vector<int> concatenate(const std::vector<int>& lhs, const std::vector<int>& rhs)
{
auto result = lhs;
std::copy( rhs.begin(), rhs.end(), std::back_inserter(result) );
return result;
}它被称为:
const auto concatenation = concatenate(first, second);如果向量很可能很大(或者包含复制成本很高的元素),那么您可能需要先执行一个reserve来保存重新分配:
std::vector<int> concatenate(const std::vector<int>& lhs, const std::vector<int>& rhs)
{
std::vector<int> result;
result.reserve( lhs.size() + rhs.size() );
std::copy( lhs.begin(), lhs.end(), std::back_inserter(result) );
std::copy( rhs.begin(), rhs.end(), std::back_inserter(result) );
return result;
}(就我个人而言,只有当有证据表明这是一个瓶颈时,我才会费心)。
https://stackoverflow.com/questions/35485866
复制相似问题