我想分割我的n个元素的数组并将其复制到两半的向量中(0到n / 2,n / 2到n)。这样做最简单的方法是什么?
答案 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::valarray
和std::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;
}