当前位置: 首页 > news >正文

网站开发 理念怎么写松江新城投资建设有限公司网站

网站开发 理念怎么写,松江新城投资建设有限公司网站,买域名网站,wordpress上传到空间简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式#xff0c;使程序员可以对容器中的元素进行逐个访问和操作#xff0c;而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器 迭代器的作用类似于指针#xff0c;可以指向容器中的某个…简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式使程序员可以对容器中的元素进行逐个访问和操作而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器 迭代器的作用类似于指针可以指向容器中的某个元素并通过操作迭代器来访问和操作该元素。通过迭代器我们可以实现对容器的遍历、查找、修改等操作大大增强了程序的灵活性和通用性。 声明迭代器 有迭代器的容器类型使用iterator和const_iterator类型来表示迭代器的类型 我们可以看个例子 vectorint::iterator it1; //it1能读取和修改vectorint的元素string::iterator it2; //it2能读取和修改string的元素vectorint::const_iterator it3; //it3能读取vectorint的元素不能修改string的元素string::const_iterator it4; //it4能读取string的元素不能修改string的元素 const_iterator的对象和常量指针差不多能读取但是不能修改它所指元素的值。相反iterator的对象可读可写。 如果vector和string对象是个常量只能使用const_iterator; 如果vector和string对象不是常量则既可以使用iterator也可以使用const_iterator begin成员和end成员  begin和end 操作生成指向容器中第一个元素和尾元素之后位置的迭代器。 这两个迭代器最常见的用途是形成一个包含容器中所有元素的迭代器范围。 begin和end有多个版本带r的版本返回反向迭代器以c开头的版本则返回const迭代器 liststring a {Milton, Shakespeare, Austen}; auto itl a.begin(); // liststring::iterator auto it2 a.rbegin(); // liststring::reverse iterator auto it3 a.cbegin(); // liststring::const iterator auto it4 a.crbegin();// liststring::const reverse iterator 不以c开头的函数都是被重载过的。 也就是说实际上有两个名为begin的成员。 一个是const成员返回容器的const iterator类型。 另一个是非常量成员返回容器的iterator类型。r begin、end和rend的情况类似。当我们对一个非常量对象调用这些成员时得到的是返回iterator的版本。只有在对一个const对象调用这些函数时才会得到一个const版本。 与const指针和引用类似可以将一个普通的iterator转换为对应的const_iterator但反之不行。 以c开头的版本是C新标准引入的用以支持auto与begin和end函数结合使用。过去没有其他选择只能显式声明希望使用哪种类型的迭代器 //显式指定类型 liststring::iterator it5 a.begin() 在C中容器的end()函数返回一个迭代器指向容器中的最后一个元素的下一个位置。而begin()函数返回一个迭代器指向容器中的第一个元素的位置。 在使用迭代器遍历容器时通常会将begin()函数返回的迭代器作为起始位置将end()函数返回的迭代器作为结束位置。遍历过程中迭代器会从起始位置逐个前进到结束位置直到到达结束位置为止。 例如对于一个vectorint容器可以使用迭代器来遍历其中的元素 vectorint vec {1, 2, 3, 4, 5};for (auto it vec.begin(); it ! vec.end(); it) {cout *it ; } cout endl;在这个例子中vec.begin()返回一个迭代器指向第一个元素1的位置vec.end()返回一个迭代器指向最后一个元素5的下一个位置。循环中首先将迭代器从起始位置1依次移动到2、3、4、5最后到达结束位置输出结果为 1 2 3 4 5 需要注意的是end()函数返回的迭代器实际上指向了容器的末尾并不指向容器中的最后一个元素。这是一个常见的迭代器设计约定。 begin和end运算符的返回类型 begin和end运算符的返回类型取决于调用它的这个对象是否是常量 如果对象是常量begin和end返回const_iterator如果对象不是常量begin和end返回iterator vectorint a; const vectorint cv; auto it1v.begin(); auto it2cv.begin(); 我们可以看到it1的类型是vectorint::iteratorit2的类型是vectorint::const_iterator  cbegin()和cend()函数——常量迭代器 为了便于专门得到const_iterator类型的返回值C11引入了两个新函数cbegin()和cend()函数 我们看看 vectorint v; auto it3v.cbegin(); 可以看到啊it3是const_iterator类型  我们来详细介绍一下它们两个 在C中容器类提供了两个函数即cbegin()和cend()函数用于获取一个常量迭代器的起始和结束位置。 cbegin()函数返回一个指向容器中第一个元素的常量迭代器。这个迭代器只能用于读取元素的值不能修改容器的内容。如果容器为空cbegin()函数将返回一个指向末尾的常量迭代器。 cend()函数返回一个指向容器中最后一个元素之后位置的常量迭代器。这个迭代器只能用于判断循环结束的条件不能访问迭代器指向的元素的值。 这两个函数适用于所有标准容器如vector、list、set等并且它们返回的迭代器类型都是const_iterator。 常见的用法是在for循环中使用cbegin()和cend()函数来遍历容器中的元素例如 std::vectorint vec {1, 2, 3, 4, 5};for (auto it vec.cbegin(); it ! vec.cend(); it) {std::cout *it ; }注意在使用cbegin()和cend()函数获取到的常量迭代器时不能通过迭代器修改容器的值只能读取元素的值。如果需要修改容器的值需要使用普通迭代器而不是常量迭代器。 使用迭代器 在C中可以使用迭代器来遍历容器中的元素。以下是使用迭代器的一般步骤 定义一个迭代器变量将其初始化为容器的起始位置。例如 vectorint vec {1, 2, 3, 4, 5}; vectorint::iterator it vec.begin();使用迭代器来访问容器中的元素。可以使用解引用操作符*来获取迭代器指向的元素值。例如 cout *it endl; // 输出第一个元素的值可以使用操作符将迭代器前进到容器的下一个元素。例如 it; // 前进到下一个元素可以使用循环结构如while、for和条件判断来遍历整个容器。例如 for (vectorint::iterator it vec.begin(); it ! vec.end(); it) {cout *it ; } cout endl;或者使用基于范围的for 循环 for (int element : vec) {cout element ; } cout endl;在使用迭代器遍历容器时需要注意以下几点 使用迭代器需要包含头文件iterator。复制容器的迭代器可以使两个迭代器指向相同的位置。不能在迭代器失效的情况下使用迭代器例如在插入或删除元素后。 迭代器运算符  在C中迭代器提供了一些运算符来对迭代器进行操作和访问容器中的元素。以下是常用的迭代器运算符 解引用运算符(*)用于获取迭代器指向位置的元素值。例如*it 表示获取迭代器 it 指向位置的元素值。 自增运算符()用于将迭代器向前移动一个位置。例如it表示将迭代器 it 向前移动一个位置。 自减运算符(--)用于将迭代器向后移动一个位置。例如--it表示将迭代器 it 向后移动一个位置。 箭头运算符(-)用于获取迭代器指向位置的成员变量或成员函数。例如it-member 表示获取迭代器 it 指向位置的成员变量或成员函数。 等于运算符()和不等于运算符(!)用于比较两个迭代器是否指向同一个位置。例如it1 it2 表示判断迭代器 it1 和 it2 是否指向同一个位置。 大于运算符()、小于运算符()、大于等于运算符()和小于等于运算符()用于比较两个迭代器指向位置的相对顺序。例如it1 it2 表示迭代器 it1 指向位置在迭代器 it2 指向位置之后。 需要注意的是不是所有运算符对所有类型的迭代器都可用。有些运算符只适用于双向迭代器或随机访问迭代器而不适用于单向迭代器。 迭代器的算术运算 在C中一些迭代器支持算术运算符这些运算符可以用于在迭代器上进行加法和减法操作。这些运算符包括 加法运算符()用于将迭代器向前移动指定的步数。例如it n 表示将迭代器 it 向前移动 n 个位置。 减法运算符(-)用于将迭代器向后移动指定的步数或者计算两个迭代器之间的距离。例如it - n 表示将迭代器 it 向后移动 n 个位置it1 - it2 表示计算迭代器 it1 和 it2 之间的距离。 需要注意的是不是所有类型的迭代器都支持算术运算符。只有随机访问迭代器支持算术运算符而单向迭代器和双向迭代器不支持算术运算符。在使用算术运算符之前应该确保迭代器的类型是随机访问迭代器。 此外还有一些其他的运算符可以与迭代器一起使用如赋值运算符()、复合赋值运算符(、-)等。这些运算符可以用于更新迭代器的位置或将一个迭代器赋值给另一个迭代器。 需要注意的是在进行算术运算时应该确保迭代器不超出容器的边界。否则可能会导致未定义的行为或错误。在使用迭代器进行算术运算时应该始终谨慎处理边界情况并确保迭代器始终指向有效的位置。 插入迭代器 如果有一个容器我们预先不知道它的长度如果要把元素添加到这个容器中而不是覆盖已有内容那该怎么办呢接下来就要使用到插入迭代器了。这三者都需要头文件iterator back_insert_iterator back_insert_iterator是一个插入迭代器适配器用于在容器的末尾插入元素。它的用法如下 创建back_insert_iterator对象并绑定到容器 std::back_insert_iteratorstd::vectorint backIt(vec);这里我们创建了一个back_insert_iterator对象backIt并将它绑定到一个std::vectorlt;int容器vec上。通过这个back_insert_iterator对象我们可以向vec插入元素。 使用插入迭代器插入元素 *backIt 6; backIt; *backIt 7; backIt; *backIt 8;我们可以通过解引用操作符*来访问插入迭代器对应的容器并将值赋给它。然后使用递增操作符来移动插入迭代器的位置。这样我们就可以在容器的末尾依次插入元素。 使用实例 std::vectorint vec; std::back_insert_iteratorstd::vectorint backIt(vec);*backIt 1; // 插入元素1 backIt; *backIt 2; // 插入元素2 backIt; *backIt 3; // 插入元素3// 另一种更简洁的写法 std::vectorint vec2; std::back_insert_iteratorstd::vectorint backIt2(vec2);std::fill_n(backIt2, 5, 42); // 在vec2末尾插入5个值为42的元素需要注意的是back_insert_iterator是一个输出迭代器只能用于写入操作不能用于读取元素。 此外它只能用于支持push_back操作的容器比如std::vector和std::list等。 insert_iterator insert_iterator是STL中的一个插入迭代器适配器用于在容器的任意位置插入元素。它的用法如下 创建insert_iterator对象并绑定到容器以及插入位置 std::insert_iteratorstd::vectorint insertIt(vec, vec.begin());这里我们创建了一个insert_iterator对象insertIt并将它绑定到一个std::vectorlt;int容器vec上同时指定插入位置为vec.begin()。通过这个insert_iterator对象我们可以在指定位置插入元素。 使用插入迭代器插入元素 *insertIt 6; insertIt; *insertIt 7; insertIt; *insertIt 8;我们可以通过解引用操作符*来访问插入迭代器对应的容器并将值赋给它。然后使用递增操作符来移动插入迭代器的位置。这样我们就可以在指定位置插入元素。 使用实例 std::vectorint vec; std::insert_iteratorstd::vectorint insertIt(vec, vec.begin());*insertIt 1; // 在vec的开始位置插入元素1 insertIt; *insertIt 2; // 在vec的第二个位置插入元素2 insertIt; *insertIt 3; // 在vec的第三个位置插入元素3// 另一种更简洁的写法 std::vectorint vec2; std::insert_iteratorstd::vectorint insertIt2(vec2, vec2.begin());std::fill_n(insertIt2, 5, 42); // 在vec2的开始位置插入5个值为42的元素需要注意的是insert_iterator是一个输出迭代器只能用于写入操作不能用于读取元素。此外它可以用于支持insert操作的容器比如std::vector和std::list等。 front_insert_iterator front_insert_iterator是一个迭代器适配器可以用于在容器的前端插入元素。它是C标准库的一部分可以用于修改向量、列表和双端队列等容器。 要使用front_insert_iterator需要包含iterator头文件 #include iostream #include iterator #include vectorint main() {std::vectorint myVector;std::front_insert_iteratorstd::vectorint frontIt(myVector);*frontIt 1; // 在向量的前端插入1frontIt; // 迭代器前进// 或者可以直接使用insert函数插入元素frontIt std::insert_iteratorstd::vectorint(myVector, myVector.begin(), 2);// 打印向量for (const auto element : myVector) {std::cout element ;}std::cout std::endl;return 0; }在这个例子中我们创建了一个名为myVector的std::vectorlt;int向量以及一个名为frontIt的front_insert_iterator迭代器。我们使用frontIt迭代器向向量中插入元素。 *frontIt 1语句在向量的前端插入值1。frontIt语句将迭代器前进到下一个位置。 另外你也可以使用insert_iterator(container, iterator, value)的语法其中container是要修改的容器iterator是要插入值的位置value是要插入的值。 在代码中的frontIt std::insert_iteratorlt;std::vectorlt;int(myVector, myVector.begin(), 2)一行中演示了这种用法。 最后我们打印出向量的元素以验证结果。输出将是 2 1这表明通过front_insert_iterator成功地在向量的前端插入了元素。
http://www.hkea.cn/news/14484657/

相关文章:

  • 专门做代工产品的网站我的小程序入口
  • 昆明免费建站模板实惠高端网站设计品牌
  • 服装公司做哪个网站ugc网站开发
  • 中国空间站是干什么的线上营销
  • 东莞做网站推广肇庆市手机网站建设品牌
  • 快速将网站seo网站开发php还是jsp
  • 柳城企业网站制作哪家好网页设计与制作模板
  • 影楼网站源码php织梦网站栏目不显示不出来
  • 合肥简川科技网站建设公司 概况龙岗营销网站建设公司哪家好
  • 网站采集来源如何修改自己的网站标题
  • 网站建设费的账务处理网站维护网站建设
  • 天津建网站查找做像册的网站
  • 高密网站建设价格非营利组织网站建设会计分录
  • 做阿里网站梁建国设计公司官网
  • 成都建网站多少钱wordpress手机版 mp3
  • 镇江企业网站排名优化深圳防疫今天最新规定
  • 长沙专业网站优化定制响应式网站 框架
  • 网站的下载二维码怎么做thinkphp做网站快吗
  • 网站建设制作需要多少钱泰州商城网站开发
  • 学编程多大年龄开始学为最佳连云港seo
  • 类似交费网站开发设计网站合集的网站
  • 网站扁平化设计理念宁乡市住房和城乡建设局网站
  • 卑鄙的网站开发公司家装设计图片
  • 北京企业响应式网站建设湖南火电建设有限公司网站
  • 江苏省住房和城乡建设网站工作室主题网站模板
  • 通桥小学的网站建设如何给给公司建立网站
  • 长沙门户网站开发做创业网站赚钱
  • 松岗怎么做企业网站设计外贸网站怎样做
  • 韩国电视剧台州网站优化排名
  • 网站一屏做多大南通网站seo