首页 > 编程语言 >C++实现自定义容器类型的范围循环

C++实现自定义容器类型的范围循环

时间:2024-06-02 09:04:17浏览次数:26  
标签:容器 begin end 自定义 int C++ 循环 MyStack size

先看一下类的设计与实现:

class MyStack {
public:
    MyStack() = default;
    MyStack(int* p,size_t len):d(p),size(len){}

    int* begin() {
        return d;
    }
    int* end() {
        return &d[size];
    }
private:
    int* d = nullptr;
    size_t size = 0;
};

这个类,按照要求必须实现begin和end函数才能实现范围循环,所以这两个函数必须存在。

范围循环的原理其实解释迭代循环的实现:

for(auto i = t.begin();i!=t.end();++i){...}

除了要求提供begin函数外还要求begin函数返回的类型支持++操作。

end是返回容器的最终位置,因为不会为其解引用,所以他不会崩溃,end的返回类型并不一定非要和begin的返回类型一致,只需要end能和begin比较即可。

int main() {
    
    int buf[10]{ 1,2,3,4,5,6,7,8,9,10 };
    MyStack a(buf, 10);
    for (auto& i : a) {
        std::cout << i << " ";
    }

    return 1;
}

当然了,上面这是只为左值类型实现的范围循环,const类型,需要重载const版本的begin和end,我这里就不做重复动作了,感兴趣的可以自己试一下。

可以加我Q群一起学习:750965328

标签:容器,begin,end,自定义,int,C++,循环,MyStack,size
From: https://www.cnblogs.com/Super-biscuits/p/18226743

相关文章

  • C++多线程原理详解
    学习C++多线程时,我有如下疑问:mutex的lock和unlock做了什么?mutex、lock_guard、unique_lock,它们之间的关系是什么?condition_variable中的wait做了什么?带着这些疑问,我查阅了一些资料,整理出本文。文章目录一、mutex二、lock_guard三、unique_lock四、condition......
  • 从C++示例理解开闭原则
    开闭原则要求我们在编写代码时,尽量不去修改原先的代码,当出现新的业务需求时,应该通过增加新代码的形式扩展业务而不是对原代码进行修改。假如我们现在有一批产品,每个产品都具有颜色和大小,产品其定义如下:enumclassColor{Red,Green,Blue};enumclassSize{Small,M......
  • C++:细谈Sleep和_sleep
    ZINCFFO的提醒还记得上上上上上上上上上上上上上上上上上上(上的个数是真实的)篇文章吗?随机应变——Sleep()和_sleep()但在ZINCFFO的C++怪谈-02中:我不喜欢Sleep......奤?媜煞鷥!整活!Sleep()是个什么东东?    Sleep()在windows.h和graphics.h里面都有。voidSlee......
  • [21] C++ 虚幻引擎项目结束
    Week21Day1大纲准备开始游戏踢除玩家根据职业更改外观样式内容踢除下线在玩家客户端调用让当前客户端下线,会退到默认地图voidAHallPlayerState::Client_AskLogout_Implementation(){ //下线 UKismetSystemLibrary::ExecuteConsoleCommand(this,TEXT("DISCONNECT")......
  • vue3 && uni-app 中小程序实现 底部tabbar 中间凸起部分 或者说自定义底部tabbar [保
    1、先来看一下效果2、代码实现 我们还是在pages.json 中正常配置我们底部的tabbar但是需要添加一个字段 "custom":true,//开启自定义tabBar 不填每次原来的tabbar在重新加载时都回闪现3、在pages同一级或者里面创建一个子组件用来放我们的模版 4、在......
  • 《C++primer》读书笔记---第九章:顺序容器
    9.1顺序容器概述下表列出了标准库的顺序容器,所有容器都提供了快速顺序访问元素的能力:多种容器中,通常使用vector是最好的选择,除非你有很好的理由选则其他容器。以下是一些选择容器的基本原则:除非你有很好的理由选择其他容器,否则选择vector如果你的程序有很多小的元素,且空......
  • c++内存分配
    想象一下你有一个房子,房子里有很多房间,每个房间都可以用来存放东西。在C++中,内存管理就像是你在设计和建造这个房子。你可以自己决定房间的数量和大小,也可以随时动态地改变它们。但是,你需要小心地管理这些房间,确保你不会浪费空间或者让房间里的东西互相干扰。所以,C++中的内存管......
  • C++Primer Plus第十一章类的使用,课后练习2,还是醉汉回家的故事 3,最慢和最快及平均概率
    修改程序清单11.15,使之报告N次测试中的最高、最低和平均步数(其中N是用户输入的整数)而不是报告每次测试的结果。头文件和实现文件不变,这里为大家方便还是贴上代码//vect.h--Vectorclasswith<<,modestate#if1#ifndef VECTOR_H_ #defineVECTOR_H_#include<io......
  • C++Primer Plus第十一章类的使用,课后练习1,还是醉汉回家的故事
    编程练习11.91.修改程序清单11.5,使之将一系列连续的随机漫步者位置写入到文件中。对于每个位置,用步号进行标示。另外,让该程序将初始条件(目标距离和步长)以及结果小结写入到该文件中。该文件的内容与下面类似:TargetDistance:100,stepSize:200:(xy)=(0,0)1:(x,y)=(-11.4......
  • 【C++】内存管理
    文章目录1.回顾C/C++的内存管理2.C++内存管理方式2.1new/delete对于内置类型2.2new/delete对于自定义2.3operatornew与operatordelete函数2.4new和delete的实现原理2.5定位new表达式3.常见面试题1.回顾C/C++的内存管理首先,我们来回顾一下内存中的区域划分......