热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

第三章C++:字符串string、向量vector和数组

第三章字符串、向量和数组头文件不应包含using声明。标准库类型string#include<string>usingstd::string

第二章介绍内置类型,本章介绍抽象数据类型库

- 其中stringvector是两种最重要的标准库类型,前者支持可变长字符串,后者表示可变长的集合
- 还有一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问string中的字符和vector中的元素。

第三章 字符串、向量和数组

  • 头文件不应包含using声明。

标准库类型string

#include using std::string
  • 初始化string

    • 直接初始化(direct initialization)

    • 拷贝初始化(copy initialization):使用等号

      string s1;string s2(s1);string s2 = s2;string s3("hiya");string s3 = "hiya";string s4(10, &#39;c&#39;); //s4的内容是cccccccccc
  • string对象上的操作

    1. cout <> s         //将string对象读入s,遇到空白停止3. getline(is, s)   //从输入流is中读取一行赋给s(换行符被读取了,但被丢弃而没有赋给s),返回is4. s.empty()        //s为空返回true,否则返回false5. s.size()6. s[n]             //返回s中第n个字符的引用,位置n从0计起          
    7. s1 + s2          //返回s1和s2连接后的结果8. s1 = s29. s1 == s210. s1 != s211. <, <=, >, >=
    • 逻辑非运算符(!)

  • string::size_type类型:s.size()的返回值类型,是string类的配套类型。它是一个无符号类型的值,能够存放下任何string对象的大小。

  • 处理string对象中的字符

    • cctype头文件:对单个字符的判断或处理的函数

      isupper(c)      //c是大写字母时为真islower(c)tolower(c)      //如果c是大写字母,则输出对于的小写字母;否则原样输出toupper(c)isalpha(c)      //c是字母时为真isdigit(c)      //c是数字时为真isalnum(c)      //c是字母或数字时为真ispunct(c)      //c是标点符号时为真isspace(c)      //c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符的一种)iscntrl(c)      //c是控制字符时为真isgraph(c)      //c不是空格但可打印时为真isprint(c)      //c是可打印字符时为真(即c是空格或具有可视形式)isxdigit(c)     //十六进制数
    • 使用C++版本的C标准库头文件,形如name.h,C++++中这些文件命名为cname,内容一样,且头文件cname中定义的名字从属于命名空间std。

  • 范围for(range for)语句

for (declaration : expression)
    statement

例如:string str("some string");//每行输出str中的一个字符for(auto c : str)    cout <

标准库类型vector

vector是一个类模板(class template)。vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。vector也常被称为容器(container).

  • 定义和初始化vector对象

vector v1vector v2(v1)vector v2 = v1vector v3(n, val)vector v4(n)vector v5{a,b,c...}vector v5 = {a,b,c...}
  • 列表初始化vector对象

vector articles = {"a", "an", "the"};
  • 向vector对象中添加元素

    运行时才知道vector对象中确切的个数:

    string word;vector text;while (cin >> word) {
        text.push_back(word);
    }
    • vector对象能高效增长:vector能在运行时高效快速地添加元素。

    • 如果循环体内包含有向vector对象添加元素的语句,则不能使用++范围for++循环。

    • push_back:把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。

      vector v2;for(int i=0; i != 100; ++1)
          v2.push_back(i);
  • 其他vector操作

v.empty()
v.size()
v.push_back(t)
v[n]        //返回v中第n个位置上元素的引用v1 = v2v1 = {a,b,c...}v1 == v2v1 != v2
<, <=, >, >=

迭代器iterator

一种通用机制:实现使用下标运算符访问string对象的字符或vector对象的元素。

类似指针类型,提供了对对象的间接访问。

  • begin和end成员

    //由编译器决定b、e的类型//b表示v的第一个元素,e表示v尾元素的下一个元素auto b = v.begin(), e = v.end();    //b、e类型相同
    • end成员返回的迭代器常被称作尾后迭代器(off-the-end iterator),或者简称尾迭代器。

    • 如果容器为空,则begin和end返回的都是尾后迭代器。

  • 标准容器迭代器运算符

*iter           返回迭代器iter所指元素的引用iter->men       解引用iter并获取钙元素的名为mem的成员,等价于(*iter).mem++iter--iteriter1 == iter2iter1 != iter2
//将字符串首字母改成大写string s("some string");if (s.begin() != s.end()) {    auto it = s.begin();
    *it = toupper(*it);
}//将迭代器从一个元素移动到另一个元素,把字符串中第一个单词改为大写//注意,使用的是!=,而不是
  • #### 迭代器类型

拥有迭代器的标准库使用iterator和const_iterator来表示迭代器的类型:

vector::iterator it;           //it能读写vector中的元素string::iterator it2;               //it2能读写string对象中的字符vector::const_iterator it3;    //it3只能读元素,不能写元素string::const_iterator it4;         //it4只能读字符,不能写字符

参考:C++Primer第五版

第二章介绍内置类型,本章介绍抽象数据类型库
- 其中stringvector是两种最重要的标准库类型,前者支持可变长字符串,后者表示可变长的集合
- 还有一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问string中的字符和vector中的元素。

相关文章:

第一章C++:函数返回值、GNU编译器命令

第二章C++:变量和基本类型

以上就是第三章C++:字符串string、向量vector和数组的详细内容,更多请关注其它相关文章!


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细介绍了W3C标准盒模型和IE传统盒模型的区别,探讨了CSS3中box-sizing属性的使用方法及其在布局中的重要性。通过实例分析,帮助读者更好地理解和应用这一关键概念。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细探讨了Java中StringBuffer类在不同情况下的扩容规则,包括空参构造、带初始字符串和指定初始容量的构造方法。通过实例代码和理论分析,帮助读者更好地理解StringBuffer的内部工作原理。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
author-avatar
Durston
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有