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

C++ Primer阅读笔记--标准库类型string和vector的使用

1--string类型

① string::size_type 类型

std::string s1;
std::string::size_type len = s1.size();

        size() 函数返回的类型是 string::size_type,其是一个无符号类型的值,可用于存放任何 string 对象的大小;

        在 C++ 11 新标准中,允许编译器通过 auto 或者 decltype 来自动推断变量的类型,则:auto len = s1.size();

② 字面值与 string 对象相加

        当使用加法运算符(+)将操作 string 对象时,必须保证加法运算符两侧的运算对象至少有一个是 string;

string s1 = "hello";
string s2 = s1 + ","; //正确,s1为string对象,把一个 string 对象和一个字面值相加
string s3 = "hello" + ","; //错误,两个运算对象都不是 string

string = s1 + "," + "world"; // 正确,因为 s1+","返回的是一个string类型

③ 基于 for 语句处理 string 字符

for (declaration : expression)
    statement

        expression 是一个 string 对象,在每次迭代中,expression 的一个字符会用于初始化变量 declaration;

std::string str("some string")
for(auto c : str)
    std::cout << c << std::endl;

2--补充知识

        C++标准库中除了定义 C++ 语言特有的功能外,也兼容了 C 语言的标准库;对于 C 语言中形如 name.h  的头文件,C++ 则命名为 cname,以此说明该头文件属于 C 语言标准库;一般在 C++ 程序中建议在使用 C 语言标准库时,使用 cname 而不是 name.h;

3--vector类型

        vector 能容纳绝大多数类型的对象作为其元素,但由于引用不是对象,所以不存在包含引用的 vector;

        通过引用遍历 vector 的元素,可以修改容器的元素;

vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9}
for(auto &i : v)
    i *= i; 

4--迭代器

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

vector<int>::iterator it; // it能读写 vector<int> 的元素
string::iterator it2; // it2能读写 string 对象中的字符

vector<int>::const_iterator it3; // it3只能读元素,不能写元素
string::const_iterator it4; // it4只能读字符,不能写字符

        如果 vector 对象或 string 对象是一个常量,则只能使用 const_iterator;如果 vector 对象或 string 对象不是一个常量,则既能使用 iterator 也能使用 const_iterator;

        begin 和 end 返回的具体类型由对象是否是常量决定,如果对象是常量,则 begin 和 end 返回 const_iterator;如果对象不是常量,则返回 iterator;

        为了专门得到 const_iterator 类型的返回值,C++11 新标准引入了 cbegin 和 cend 两个函数;

vector<int> v;
auto it3 = v.cbegin(); // it3的类型是vector<int>::const_iterator


http://www.kler.cn/a/10506.html

相关文章:

  • WebStorm 如何调试 Vue 项目
  • leetcode206. Reverse Linked List
  • 光流法与直接法在SLAM中的应用
  • goframe开发一个企业网站 rabbitmq队例15
  • Linux中线程的基本概念与线程控制
  • VSCode中python插件安装后无法调试
  • oracle中sql 正则怎么写?
  • ArrayList的深入理解
  • 不会注册ChatGPT?4个国内网站让你尽情体验
  • GameFramework 框架详解之 如何接入热更框架HybridCLR
  • 【音频处理】创建环绕声混响
  • pycharm笔记
  • 内部人员或给企业造成毁灭性损失
  • LAZADA将缩短履约时效,卖家发货倍感压力
  • 代码随想录_226翻转二叉树、101对称二叉树
  • item_search_img-按图搜索1688商品(拍立淘)接口的接入参数说明
  • 跟着AI学AI(2): 逻辑回归
  • Spring Cloud快速入门
  • 网络安全之入侵检测
  • NVIDIA- cuSPARSE(四)
  • 【Flutter进阶】聊一聊组件中的生命周期、状态管理及局部重绘
  • 数据优化 | CnOpenDataA股上市公司招聘数据
  • 关于合金电阻
  • vue项目用后端返回的文件流实现docx和pdf文件预览
  • Java 进阶(11) 线程安全
  • virtualbox如何配网