我正在寫作(作爲一種自我教學練習)一個簡單的STL-Like範圍。它是一個不可變隨機訪問「容器」。我的範圍,只保留其開始元素,元素的數量和步長(連續兩個元素之間的差值):類似STL的範圍,如果我這樣做會出現什麼問題?
struct range
{
...
private:
value_type m_first_element, m_element_count, m_step;
};
因爲我的範圍不成立的元素,它計算所需元素使用以下:
// In the standards, the operator[]
// should return a const reference.
// Because Range doesn't store its elements
// internally, we return a copy of the value.
value_type operator[](size_type index)
{
return m_first_element + m_step*index;
}
正如你所看到的,我不是返回const reference
爲標準說。現在,可以假定const reference
和該元素的副本在使用標準庫中的非變異算法方面是相同的嗎?
關於這個問題的任何意見,非常感謝。
@Steve傑索普:你提到的迭代好點。其實,我用sgi as my reference。在該頁面的結束,它說:
假設X和Y是來自同一範圍的迭代器:
不變身份
x == y if and only if &*x == &*y
所以,沸騰一直到我問過的同一個原始問題:)
如果你在operator []中創建了一個要返回的元素,然後返回了對它的引用,那麼這個引用是不是總是一個錯誤的引用,因爲這個實例會馬上超出範圍?
該標準討論的是容器中的參考,這不是容器。 – 2010-01-31 00:27:21
@Chris我同意它不是一個真正的容器。這就是爲什麼我在上面第二句話中將「容器」放在雙引號之間。 – AraK 2010-01-31 00:31:37
您可能想要查看boost :: iterator_range和boost :: sub_range獲取靈感:http://www.boost.org/doc/libs/1_41_0/libs/range/index.html – 2010-01-31 04:12:30