2014-09-22 93 views
1

我有一個數組,我們說200個成員,然後是一個更小的數組,比方說100個成員。如果較大的數組有113個成員,則不能將整個數組放入較小的數組中。所以我想要讓它從底層開始,並儘可能地適應更小的陣列。我該怎麼做呢?如何將更大的陣列縮小爲更小的陣列?

int uniq() { static int current = 0; return ++current; } 

int main() 
{ 
    int larger_array[200]; 
    int smaller_array[100]; 
    std::generate_n(larger_array, 113, uniq); 
    std::reverse_copy(std::begin(larger_array), std::end(larger_array), std::begin(smaller_array)); 
    for (int i = 0; i < 100; ++i) 
     std::cout << smaller_array[i] << "\n"; 
    return 0; 
} 
+0

使用'std :: copy',但應用了明智的限制。 – 2014-09-22 22:49:40

+0

你應該使用'std :: vector'而不是數組。如果你使用數組,那麼你需要有一個非常具體的原因,並且這個原因可能會影響你的問題的正確答案。你真的想做什麼? – 2014-09-22 22:59:21

回答

0

如果你知道你想要的larger_array最後100元素與此相反的應該工作拷貝。與您的代碼唯一的區別是使用std::prev()來獲取第一個迭代器。

std::reverse_copy(std::prev(std::end(larger_array), 100), std::end(larger_array), std::begin(smaller_array)); 
1

使用std::copy,是這樣的:

std::copy(std::begin(largerArray), std::begin(largerArray) + 
    (std::end(smallerArray) - std::begin(smallerArray)), 
    std::begin(smallerArray)); 
+0

這給了我一個分段錯誤。 – user4068376 2014-09-22 22:54:47

+0

@ user4068376對不起,錯了。用正確的解決方案編輯答案。 – 2014-09-22 22:56:17

+0

@PaulEvans:我認爲你有你的來源和目的地倒退。 – Blastfurnace 2014-09-22 22:58:53