簡體   English   中英

從數組構造

[英]Construction from Array

我正在為C ++開發一個簡單的容器類,我意識到能夠從數組中復制值會很有幫助。

兩者之間的區別在於:

myClass myInstance;
myInstance += 2;
myInstance += 4;
myInstance += 8;
myInstance += 16;

和這個:

myClass myInstance;
int myArray[] = {2, 4, 8, 16};
myInstance = myArray;

顯然,陣列結構要清潔得多。 但是,由於您無法獲得傳遞給函數的數組的大小(在這種情況下為operator= ),因此復制值是一個問題。

我可以將size與數組一起作為參數傳遞,但這意味着我不能使用operator=

myInstance.getArrayValues(myArray, 4);

遠不如直觀

myInstance = myArray;

這樣的事情通常如何處理?

實際上,您可以通過引用接受本機數組。 這是一個可以執行所需操作的賦值運算符的示例:

template <std::size_t N>
const myClass& operator=(const int(&arr)[N])
{
    // use arr as you do usually with arrays :)
    // N is the size of the array.
    return *this;
}

最好的方法可能是使用迭代器,即為您的類提供一個包含第一個和最后一個迭代器的模板化函數,該函數當然也可以使用指針。

好處是您將可以從任何容器中獲取輸入。

或者,您可以等待編譯器中的C ++ 0x支持,並充分利用新功能,該功能允許使用初始化列表(如數組)進行構造(如果我沒記錯的話)。 在那之前,我認為使用迭代器是必經之路。

Boost.Assignment庫旨在解決此問題。

該標准在std::vector模板類中進行處理(TR1的std::array類用於不更改大小/容量的C樣式數組)。

std::vector通過使用insert和Assign函數完成了您想要的(再次,不重載operator= )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM