1. 程式人生 > >STL中迭代器與指標的區別

STL中迭代器與指標的區別

typedef std::vector<struct pollfd> PollFdList;
struct pollfd pfd; //一個結構體
pfd.fd = listenfd;
pfd.events = POLLIN;//表示資料可讀的事件型別
PollFdList pollfds;//例項化一個向量陣列
pollfds.push_back(pfd);//在Vector最後新增一個元素
poll(&*pollfds.begin(), pollfds.size(), -1);
pollfds.begin()就是首個無素迭代器
*pollfds.begin()就是首個元素
&*pollfds.begin()就是首個元素地址
vector內部空間是連續的 
pollfds.begin()是返回的是向量容器中第一個元素的地址,*pollfds.begin()就是首個元素的內容,&*pollfds.begin()就是首個元素的地址,
這裡pollfds.begin()和&*pollfds.begin()實際上是並不相等的,雖然他們都是指向的元素的首地址,但這裡的引數要的要的是個指標型別,這裡如果
pollfds是個陣列名是可以的(也表示一個指標嘛),但這裡 pollfds是個向量類(雖然內容是陣列實現的),直接填上他就不行,所以就需要上面的轉換,
pollfds.begin()返回一個迭代器,這個迭代器通過過載運算子對外提供了指標類似的操作,
但不能說他就等同於指標,地址是相等的,但型別不同,
所以也不能直接填pollfds.begin(),直接填的話,編譯器會做型別檢查的,編譯會出錯的,因為這個引數要的是個指標,而不是一個指向(雖然他和指標表面上看一樣的)
 它提供了跟指標一樣的介面而已通過這些介面 使用起來  跟指標一樣