std中list作為常量傳參時乙個迭代器錯誤

2022-09-17 01:51:13 字數 1401 閱讀 2152

如果list作為常量引數傳入函式時,使用list的迭代器要注意,如果**這樣寫:

ostream& operator

<<(ostream& ostr,const list&li)

return

ostr;

}

[error] conversion from 'std::list::const_iterator ' to non-scalar type 'std::list::iterator ' requested

大概意思是無法把const_iterator轉換為iterator。

帶著問題檢視一下,list的實現原始碼,發現,list居然有兩個begin()函式,分別如下:

//

iterators/**

* returns a read/write iterator that points to the first element in the

* %list. iteration is done in ordinary element order.

*/iterator

begin() _glibcxx_noexcept

/*** returns a read-only (constant) iterator that points to the

* first element in the %list. iteration is done in ordinary

* element order.

*/const_iterator

begin()

const

_glibcxx_noexcept

出錯原因明白了,因為傳入的引數為const,所以呼叫的是第二個函式,返回的是const_iterator,而不是iterator,才會報錯。

在原有基礎上做如下修改即可正確執行,

ostream& operator

<<(ostream& ostr,const list&li)

return

ostr;

}

就是再宣告迭代器是,由原來的:list::iterator it 改為:list::const_iterator it

乙個完整的**:演示list中sort函式的用法,list無法使用algorithm的sort:

#include#include

#include

using

namespace

std;

ostream& operator

<<(ostream& ostr,const list&li)

return

ostr;

}int

main()

sql中傳入乙個list,返回乙個list

傳入陣列 返回list string sendpersonidarr sendpersonid.split listlist staffinfoservice.listphonesbyids sendpersonidarr select h.telphone from hr staff info h...

kw傳參乙個重要的細節

如圖所示 傳入乙個字典給到函式,該函式能進行自動根據關鍵字字典進行匹配 不是按順序來,等同於按變數名傳遞 當將字典用型別用 號傳遞給函式時,等價於 key value傳遞引數 這裡的函式並沒有用 kw,函式會識別 這個來傳遞 如果識別到傳遞 這個符號,就會將緊隨而來的變數當作字典進行變換 key v...

MySQL 儲存過程傳參的乙個坑

例如乙個儲存過程 delimiter create procedure read score in id int begin select from score where id id end delimiter 在這種情況下,無論我傳入id是什麼值,這個儲存過程都會返回score的所有資料。原因是...