合并a和b的向量

时间:2014-03-08 04:48:34

标签: c++ vector merge

我正在尝试返回一个向量结合a和b的向量的向量,如果向量a的值为1,2,3且向量b的值为4,5,6,8,9,然后该函数返回1,4,2,5,3,6,7,8,9的向量。到目前为止,我得到了这段代码:

vector<int> merge(const vector<int>& a,
                   const vector<int>& b){
    vector<int> result;

    size_t aLen = a.size(), bLen = b.size();
    size_t aVal = 0, bVal = 0;
    for (size_t i = 0; i < (aLen + bLen); i++){
        if (i % 2 == 0 && aVal < aLen){
            result.push_back(a.at(aVal));
            aVal++;
        }
        else if (bVal < bLen){
            result.push_back(b.at(bVal));
            bVal++;
        }
    }

    return result;
}

1 个答案:

答案 0 :(得分:1)

不确定你在问什么,但如果它只是两个向量的联合,那么你可以使用算法来做到这一点:

    #include <algorithm>
    #include <vector>
    #include <iterator>

    using namespace std;

    vector<int> merge(const vector<int>& a,
                      const vector<int>& b)
    {
        vector<int> result;
        std::set_union(a.begin(), a.end(), b.begin(), b.end(), back_inserter(result));
        return result;
    }

见这里:http://www.cplusplus.com/reference/algorithm/set_union/

如果您的目标是实际交织两个已排序的向量,那么您可能应该选择std :: list over vector,然后调用merge()。

见这里:http://www.cplusplus.com/reference/list/list/merge/