我有一個帶有f_next欄位的類,看起來像這樣:
class process
{
public:
typedef std::shared_ptr< process> pointer_t;
typedef std::list<pointer_t> list_t;
void add_next_process(pointer_t p)。
void wait()。
private:
list_t f_next = list_t()。
};
add_next_process()只是將p附加到f_next:
f_next.push_back(p)。
結果,wait()必須收集所有的行程并等待所有的行程。我想避免遞回,而是生成一個所有f_next的串列,像這樣:
list_t n(f_next)。
for(auto & it : n)
{
n.insert(n.end(), it-> f_next.begin(), it-> f_next.end() 。)
}
一旦for()回圈退出,n是否保證包括所有的專案?
我知道std::list::insert()并沒有改變迭代器:
沒有迭代器或參考被廢止。
但是我想知道for(auto ...)是否會繼續通過我沿途附加的所有專案。
uj5u.com熱心網友回復:
For-range只是一個經典for回圈在迭代器上操作的語法糖。 只要你的容器實作了begin和end(或者你有免費的多載),并且在這個程序中不使迭代器失效,這在技術上應該沒有問題。 其他問題是這是否是一個好的、可維護的想法。
在C 17之前:
auto && __range = range-expression ;
for (auto __begin = begin_expr, __end = end_expr; __begin != __end; __begin) {
range-declaration = *__begin;
回圈陳述句
}
來自C 17:
auto && __range = range-expression ;
auto __begin = begin_expr ;
auto __end = end_expr ;
for ( ; __begin != __end; __begin) {
range-declaration = *__begin;
回圈宣告
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/325734.html
標籤:
上一篇:在java中合并兩個物件串列
