我有两个STL向量A和B,并且需要将它们合并到第三个向量中,其中元素应该以某种方式排序,输出向量中的每个第n个元素应该是矢量B.我当前的代码看起来是这样的:合并具有交替模式的两个STL向量
std::vector<int> a(10, 4);
std::vector<int> b(10, 8);
std::vector<int> c;
static const std::size_t STEP(3);
std::vector<int>::const_iterator bIt = b.begin();
for(std::vector<int>::const_iterator aIt = a.begin();
aIt != a.end(); ++aIt)
{
c.push_back(*aIt);
if((c.size() + 1) % STEP == 0)
{
c.push_back(*bIt);
++bIt; //assume b is large enough
}
}
向量C现在的样子: 4 4 8 4 4 8 ...
这工作得很好,但我很好奇,如果有并不是一个更优雅的解决方案。有什么方法可以使用STL算法而不是手写循环吗?
c的结尾是什么?你想拥有它吗?4 4 8 .... 8 8 8 8或者只是停止合并aIt就像你的例子中的a.end()一样? – dyp 2010-09-07 17:02:33
那么,如果任一输入向量没有足够的元素会发生什么? – AnT 2010-09-07 18:22:09
STL已经有一个惯例 - 当任何输入序列没有足够的元素时,“std :: transform”会做什么? – MSalters 2010-09-08 09:18:23