复制子向量

时间:2010-08-25 02:51:10

标签: c++

我想分割我的n个元素的数组并将其复制到两半的向量中(0到n / 2,n / 2到n)。这样做最简单的方法是什么?

3 个答案:

答案 0 :(得分:10)

你想做这样的事吗?

int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

std::vector<int> fst(&array[0], &array[5]);
std::vector<int> snd(&array[5], &array[10]);

这将创建一个包含fst的前五个元素的向量array,以及一个包含其余元素的向量snd

答案 1 :(得分:8)

要添加到@ sth的答案,你可以对所有向量做同样的事情(并且他的答案为+1):

std::vector<int> source;
//Add things to source
std::vector<int> first(source.begin(), source.begin() + source.size()/2);
std::vector<int> second(source.begin() + source.size()/2, source.end());

答案 2 :(得分:1)

您可以使用std::valarraystd::slice,如下所示:

#include <valarray>
#include <iostream>

int main(int argc, char *argv[])
{
    std::valarray<unsigned int> va(10);

    for (size_t i = 0; i < va.size(); ++i)
        va[i] = i*2;

    std::valarray<unsigned int> fh = va[std::slice(0, va.size()/2, 1)];
    std::valarray<unsigned int> sh = va[std::slice(va.size()/2, va.size()/2, 1)];

    std::cout << "first half: ";
    for (size_t i = 0; i < fh.size(); ++i)
        std::cout << fh[i] << " ";

    std::cout <<std::endl;

    std::cout << "second half: ";
    for (size_t i = 0; i < sh.size(); ++i)
        std::cout << sh[i] << " ";

    std::cout << std::endl;
}