如何使用一行代码连接两个向量

时间:2015-03-24 19:08:53

标签: c++ stdvector

我发誓,这并不是矢量连接中任何看似无穷无尽的线程的重复。对于我的情况,在派生类构造函数中,我需要将std::vector<int>传递给基类构造函数,但传递的向量需要是另外两个向量的串联。例如:

#include <vector>    
using namespace std;

struct Base {
    Base(vector<int> numbers) {
        //Do something with numbers
    }
};

struct Derived: public Base {
    Derived(vector<int> numbers):
        Base(concatenate(numbers, {4,5,6})) {}  //Is there a built-in "concatenate" function?
}; 

int main (int argc, char* argv[])
{
    Derived D({1,2,3});
    return 0;
}

我显然可以通过编写自己的concatenate函数来实现这一点,但我想知道是否已经有标准库方法来执行此操作。我发现的矢量级联的例子都不适合在初始化列表中使用,因为它们跨越多行;我需要一个单线串联。

2 个答案:

答案 0 :(得分:6)

好的,因为numbers是按值传递的,我们可以通过将初始化列表insert与逗号运算符组合来使用技巧:

struct Derived: public Base {
    Derived(vector<int> numbers):
        Base((numbers.insert(numbers.end(), {4,5,6}), numbers)) {}
}; 

答案 1 :(得分:3)

将向量[b]添加到向量[a]:

    a.insert(a.end(), b.begin(), b.end());

如果您不想改变,可以将其复制到第三个载体。