如果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的所有資料。原因是...