2010-08-25 154 views
3

我想劃分我的n個元素的數組,並將其複製到一個向量兩半(0到n/2,n/2到n)中。這樣做最簡單的方法是什麼?複製一個子向量

+1

如果你編寫你的算法來使用迭代器範圍(比如在一個向量內)而不是整個向量,你可能不需要複製任何東西,或者至少避免容器的擴散。基於迭代器的算法通常比基於容器的算法效果更好。 – Potatoswatter 2010-08-25 04:38:16

+0

您好在這裏複製功能。例如,如果我使用源作爲矢量?如何使用它 ? – brett 2010-08-25 05:27:25

回答

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

+0

非常感謝。 – brett 2010-08-25 02:59:27

8

要添加到@某事的答案,你可以做同樣的事情,所有的向量(和+1到他的答案BTW):

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()); 
+0

+1:用於給出矢量替代 – Chubsdad 2010-08-25 03:02:19

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; 
}