色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一分鐘了解C++迭代器

冬至子 ? 來源:鳴鳴鑼的小屋 ? 作者:Maxwell Luo ? 2023-07-22 09:55 ? 次閱讀

>>> 背景

最近遇到一個很有趣的問題,大概是信息技術(shù)類的中考試題,問題如下。正確答案是A,在python中整數(shù)是不可以使用for遍歷的,這一點可以立刻通過解釋器進行驗證。但是如果寫成(123, )則會在字面上被認為是一個元組,又是可以通過for遍歷的。

圖片

圖片

圖片

python不能對整數(shù)使用for循環(huán)進行遍歷,這是因為整數(shù)不是可迭代對象,這里就會涉及一個概念,即迭代器。

>>> 內(nèi)容

迭代器被引入的動機,就是為了解決不同數(shù)據(jù)容器的遍歷訪問方法不同的問題。通過引入迭代器,可以統(tǒng)一化容器的訪問,提高代碼的復(fù)用性,提高程序員的生活質(zhì)量。

那么我們以python這個迭代問題為引子,來講一講C++里面是如何實現(xiàn)迭代器的,并給出一個非常簡單的迭代器實例。

我們首先來創(chuàng)建一個數(shù)據(jù)容器。這個數(shù)據(jù)容器基本上就是一個數(shù)組而已。這里刪除了其他的構(gòu)造方法,僅僅保留一個列表初始化方法,這樣我們能通過類似 MyArray< int > obj = { 1 , 2 , 3 }; 的方法快速創(chuàng)建一個數(shù)據(jù)對象。

#include < iostream >
using namespace std;


template < typename T >
class MyArray final {
public:
    MyArray() = delete;
    MyArray(const MyArray&) = delete;
    MyArray(const MyArray&&) = delete;

    MyArray(const initializer_list< T > &v) {
        _size = v.size();
        _data_ptr = new T[_size];
        size_t i = 0;
        for (auto it : v) {
            *(_data_ptr + i) = it;
            ++i;
        }
    }
    ~MyArray() {delete [] _data_ptr;}


private:
    T* _data_ptr;
    size_t _size;
};

我們在數(shù)據(jù)類中嵌入了迭代器的定義,這樣數(shù)據(jù)類的引入也會緊跟迭代器的定義,不需要額外引入迭代器定義。可以看到,一個簡單的迭代器就是實現(xiàn)了operator*,operator++,operator==和operator!=的類。通過這幾個功能,我們就能完成迭代器更迭、迭代器取值的基本功能。

template
class MyArray final {
public:
class Iterator {
public:
Iterator(T* _p) : _curr_ptr(_p) {}
Iterator(const Iterator& other) {
if (this != &other) {
this->_curr_ptr = other._curr_ptr;
}
}
T& operator*() const {
return *_curr_ptr;
}
Iterator& operator++() {
++_curr_ptr;
return *this;
}
const Iterator operator++(int) {
Iterator tmp(*this);
++_curr_ptr;
return tmp;
}
bool operator==(const Iterator& it) const {
return this->_curr_ptr == it._curr_ptr;
}
bool operator!=(const Iterator& it) const {
return !(this == it);
}
private:
T
_curr_ptr;
};
// ...
}

這里額外提一下,關(guān)于++i和i++的重載。++i返回的是左值,而且是自增之后的值,重載原型使用 Iterator& operator ++() 來表示。i++返回的是右值,而且是自增之前的值,所以需要保存一個自增前的對象副本用于返回,重載原型使用 const Iterator operator ++(int) ,這里原型使用int純粹是為了和++i的函數(shù)區(qū)分(重載只認參數(shù)列表而不在乎返回值)。

除此之外,我們的數(shù)據(jù)類還應(yīng)該提供迭代器的起始位置和終止位置,也就是常見的begin()和end()方法。

template
class MyArray final {
public:
class Iterator {
// ...
};

public:
// ...
Iterator begin() {
return Iterator(_data_ptr);
}
Iterator end() {
return Iterator(_data_ptr + _size);
}
// ...
};

完成上述工作之后,就可以用迭代器的方法來遍歷整個數(shù)組啦,甚至可以使用遍歷for語法。Enjoy!

int main() {
MyArray obj = {1, 2, 3};
for (auto it = obj.begin(); it != obj.end(); ++it) {
cout << *it << " ";
}
cout << endl;
for (auto v : obj) {
cout << v << " ";
}

return 0;

}


1 2 3
1 2 3


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++語言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6989
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4793

    瀏覽量

    84631
  • 迭代器
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    4307
收藏 人收藏

    評論

    相關(guān)推薦

    人類首次“看到”引力波,一分鐘了解中子星&引力波

    組漫畫圖,用最輕松、通俗的方式解讀了這次大事件,保證你一分鐘就能恍然大悟!
    的頭像 發(fā)表于 10-19 16:13 ?3893次閱讀

    [貼圖]一分鐘的時間你的身邊都會出現(xiàn)什么變化?

    一分鐘的時間你的身邊都會出現(xiàn)什么變化?靜下心來想想一分鐘能干什么?一分鐘能跳繩200下,慢跑200米。一分鐘可以瀏覽5條微博,轉(zhuǎn)發(fā)3個貼子,回復(fù)2個評論,百度1首知道旋律卻記不起歌詞的
    發(fā)表于 12-02 15:33

    labview關(guān)于一分鐘內(nèi)采集開關(guān)量01的計數(shù)

    各位大神,我想做個記錄一分鐘內(nèi)采集到開關(guān)量0 的計數(shù)
    發(fā)表于 04-08 19:15

    一分鐘自動正反轉(zhuǎn)直流電機控制電路

    我要找個電路:12v直流電機,每一分鐘自動反轉(zhuǎn)
    發(fā)表于 10-07 18:07

    個按鍵板一分鐘不操作的話led燈就會變暗

    個按鍵板,一分鐘不操作的話,led燈就會變暗;操作的時候led燈亮度較高。 (不進掉電模式,省電模式也不進。)用51單片機怎么實現(xiàn)?
    發(fā)表于 08-29 15:15

    用MSP430定時一分鐘,怎么計算初值?

    用MSP430定時一分鐘,怎么計算那個初值
    發(fā)表于 08-08 10:45

    藍牙音箱的面板怎么實現(xiàn)一分鐘待機?

    個藍牙音箱的面板。4個按鍵,不按的話,一分鐘,要求led燈變暗;按鍵有操作的時候,led燈變亮。(led燈全程是開著的)(51核單片機 不能進入休眠狀態(tài))。高人們指導(dǎo)下,應(yīng)該怎么去做。
    發(fā)表于 10-22 04:36

    一分鐘帶你看懂公有云和私有云的區(qū)別

    私有云和公有云的顯著差別在于對數(shù)據(jù)的掌控。只需一分鐘,下面幾張圖就能讓你看懂公有云和私有云的本質(zhì)區(qū)別。
    發(fā)表于 01-25 16:18 ?6.3w次閱讀

    HL配套C實驗例程一分鐘倒計時

    HL配套C實驗例程一分鐘倒計時,配合開發(fā)板學(xué)習(xí)效果更好。
    發(fā)表于 04-11 17:04 ?6次下載

    一分鐘看懂51控制的MT8880雙音頻收發(fā)的匯編程序及源代碼

    一分鐘看懂51控制的MT8880雙音頻收發(fā)的匯編程序及源代碼。
    發(fā)表于 05-29 11:15 ?3130次閱讀
    <b class='flag-5'>一分鐘</b>看懂51控制的MT8880雙音頻收發(fā)<b class='flag-5'>器</b>的匯編程序及源代碼

    一分鐘學(xué)會FastZigBee

    電子發(fā)燒友網(wǎng)站提供《一分鐘學(xué)會FastZigBee.pdf》資料免費下載
    發(fā)表于 10-17 10:38 ?0次下載
    <b class='flag-5'>一分鐘</b>學(xué)會FastZigBee

    一分鐘制作PCB的簡單方法

    盡管現(xiàn)在網(wǎng)上PCB制板已經(jīng)非常快捷和便宜,甚至有的廠家提供免費測試板制作,但比起“一分鐘制板”來制作測試電路板,發(fā)送出去制板還是時間太長。
    的頭像 發(fā)表于 02-28 09:20 ?3403次閱讀

    超級最后一分鐘DIY情人節(jié)賀卡

    電子發(fā)燒友網(wǎng)站提供《超級最后一分鐘DIY情人節(jié)賀卡.zip》資料免費下載
    發(fā)表于 07-06 14:47 ?0次下載
    超級最后<b class='flag-5'>一分鐘</b>DIY情人節(jié)賀卡

    一分鐘看完看懂電機的接線方法

    今天給大家講解下,看懂電機的接線方法,一分鐘看完,看就懂!。 電機的接線方法無外乎以下兩種 1a星形接法(實物圖)
    發(fā)表于 03-31 15:40 ?3605次閱讀
    <b class='flag-5'>一分鐘</b>看完看懂電機的接線方法

    用現(xiàn)代移位寄存克服最后一分鐘的特征蠕變

    電子發(fā)燒友網(wǎng)站提供《用現(xiàn)代移位寄存克服最后一分鐘的特征蠕變.pdf》資料免費下載
    發(fā)表于 09-21 11:20 ?0次下載
    用現(xiàn)代移位寄存<b class='flag-5'>器</b>克服最后<b class='flag-5'>一分鐘</b>的特征蠕變
    主站蜘蛛池模板: 亚洲视频在线免费看| 97国产揄拍国产精品人妻| 最新国产亚洲亚洲精品视频| SORA是什么意思| 国产亚洲人成网站在线观看播放| 看了n遍舍不得删的黄文| 色妹子综合| 中文字幕在线久热精品| 囯产愉拍亚洲精品一区| 老师系列高H文| 国产超碰精久久久久久无码AV| 精品成人在线视频| 日本特殊精油按摩| 在线观看免费小视频| 国产白丝精品爽爽久久蜜臀| 美女裸露100%奶头视频| 小小水蜜桃免费影院| gay台湾无套男同志xnxⅹ| 娇小8一12xxxx第一次| 日产精品高潮呻吟AV久久| 永久免费的无码中文字幕| 国产成人精选免费视频| 美女张开腿让男人桶爽无弹窗| 亚洲2023无矿砖码砖区| 边摸边吃奶边做激情叫床视| 久久免费精品视频| 午夜男女爽爽羞羞影院在线观看| 99热这里只有精品88| 久久精品热老司机| 無码一区中文字幕少妇熟女H| 99久久免费看少妇高潮A片| 精品成人在线视频| 哇嘎在线精品视频在线观看| ca88亚洲城娱乐| 老熟风间由美AV在线一区二区| 亚洲、国产综合视频| 成人在线视频免费观看| 男女免费观看在线爽爽爽视频| 伊人久久青草青青综合| 国产亚洲综合视频| 熟妇内谢69XXXXXA片|