的std::list
公共接口未在節點和值來定義。它被定義爲類型爲value_type
的元件的容器。因此,您可以而不是訪問鏈接列表的「節點」,只有它的元素。
如果你想從本地std::list
從一個函數返回的第一個元素,那麼你必須返回元素的副本,當函數體超出範圍的所有本地對象將被銷燬。
int func() {
std::list<int> l { 1, 2, 3 };
return l.front(); // Return a copy of the first element.
} // l gets destroyed here.
這個採訪查詢的目的可能是檢查你是否瞭解本地對象生命週期的機制。
例如,您可以不從函數內部返回一個引用或指針到本地自動對象:
int& func() { // Notice return type.
std::list<int> l { 1, 2, 3 };
return l.front(); // Return a reference to the first element.
} // l gets destroyed here.
int main() {
const int& number = func(); // Dangling reference!
std::cout << number; // The UB deamons come!
}
它,然後應該是'INT函數()'。 – user1810087
這個問題似乎牽扯到兩個方向。通常鏈表中的節點不僅僅是包含的值(它還包括指向下一個節點的指針)。但std :: list將其實際節點類型隱藏爲實現細節,只允許您訪問所包含的值(在這種情況下,迫使您返回int,正如其他人所建議的那樣) –
也許重點是測試您對本地變量(在堆棧上創建,在函數退出時銷燬)與分配(在堆上使用'new'創建,在函數退出後仍然存在)。返回一個迭代器到一個局部變量將是一個壞主意,因爲它不會存在迭代器被取消引用 –