我看到了不同的方法來初始化C++ 11中的數組(c樣式或std :: array)向量。 假設我有一個這樣的數組:uint8_t arr[5000]
或者像這樣:std::array<uint8_t, 5000> arr;
作爲一個例子。矢量的初始化
如果我想從ARR 5000米的價值觀,我可以初始化以下方式:
std::vector<uint8_t> vect(arr, arr + 5000);
std::vector<uint8_t> vect(std::begin(arr), std::end(arr));
std::vector<uint8_t> vect(arr.begin(), arr.end());
這一個適用,如果ARR是std::array<uint8_t, 5000>
)
根據this answer,選項3比選項1和2更好。最好使用容器的成員函數而不是非成員函數。
我總是看到c樣式陣列的第一個選項。選項1是否與選項2完全相同?那背後有什麼微妙之處?
感謝您的幫助。
實際上,所有的答案都建議使用選項2而不是選項3 - 對於實際實現'begin()'和'end()'方法的容器,無論如何它都會做同樣的事情。它也適用於C風格的數組,如果你有一些奇怪的包含非標準方法的容器來獲取它們的開始和結束迭代器,你可以隨時編寫自己的免費'begin'和'end'函數。 –
你已經連接到**的問題中接受的答案不會**說使用成員函數更好。他只是指出在C風格的數組上也有free函數'begin'和'end'。正是這個原因,我會堅持免費的功能。 – Praetorian
此外,選項1具有實際必須知道偏移量的明顯缺點。 :) –