我读C++ Primer - string vector 与数组
来源:互联网 发布:极十软件 编辑:程序博客网 时间:2024/04/29 11:34
在第二章主要介绍了C++ 的内置类型,除此之外,还有许多标准库中的类型也经常用到,这里这要讲string vector,以及数组。
string表示可变长的字符序列,vector表示某种给定类型的可变长序列,他们都是标准库类型。
头文件中不应该包含using声明,防止与包含此头文件的文件中有命名冲突。
1 标准库类型 string
包含头文件:
#include <string>using std::string;(1) 定义与初始化
默认初始化为空的string
string s1;string s2(s1);string s2 = s1;string s3("value");string s4(n,'c');
(2) 操作string
os<<sis>>sgetline(is,s)s.empty()s.size()s[n]s1 + s2s1 = s2s1 == s2< <= > >=其中,读取一整行 getline(cin, s)
size() 函数返回的是size_type类型,无符号,注意避免与int 混用
字面值与string 对象相加减,必须保证+ 的两侧至少一个是string
(3) 处理string中字符
isalnum(c) //判断字母或数字isalpha(c) //字母iscntrl(c) //控制字符isdigit(c) //数字isgraph(c) //不是空格但可打印islower(c) //小写字母isprint(c) //可打印(空格或可视形式)ispunct(c) //标点符号isspace(c) //空白isupper(c) //大写字母isxdigit(c) //十六进制数字tolower(c) //输出小写字母toupper(c) //输出大写字母
输出string中每个对象
string str("some string");for (auto c : str) cout<<c<<endl;若要改变字符串中字符,用引用
string str("some string");for (auto &c : str) c = toupper(c); cout<<str<<endl;
#include<vector>using std::vector;(1)定义和初始化vector
最常用的形式是定义一个空vector 然后在添加元素值
vector<T> v1vector<T> v2(v1)vector<T> v2 = v1vector<T> v3(n,val)vector<T> v4(n)vector<T> v5{a,b,c...}(2) 添加元素
向vector 添加元素使用的如此频繁,以至于拿出来单独介绍
vector<int> v;for(int i = 0; i < 100; ++i) v.push_back(i);不过要注意的是for循环中不应该改变vector的大小
(3) 其他操作
v.empty()v.size()v[n]v1 = v2v1 = {a,b,c...}v1 == v2< <= > >=对vector进行存取可以使用下标或者迭代器,要注意的是使用下标要检查元素是否存在,不能用下标来添加元素
(3) 迭代器
所有标准库容器都可以使用迭代器来遍历容器中元素。
这里列举一个使用迭代器运算实现的二分搜索:
数组也是存放相同类型对象的容器,与vector 不同的是,数组的大小确定不变,不能随意添加元素
(1) 定义和初始化数组
数组的声明形式 a[d] a是数组名字,d是数组维度,也即元素个数。维度必须是一个常量表达式
int a[10];const int num = 10;int b[num] = {0,1,2};char c[] = {'c','+','+'};char c2[] = "C++";
注意,默认数组初始化为0,最后一种用字面值初始化数组会自动添加‘\0’
对于某些复杂数组的声明(如数组指针,指针数组),最好按照从数组名字由内向外的顺序阅读
(2) 访问数组元素
使用下标方式,注意检查是否越界
(3) 指针与数组
使用数组的时候,编译器一般会把数组名字转换成指向数组首元素的指针
对数组元素取地址能得到指向该元素的指针:
string nums[] = {"one","two"};string *p = &nums[0];因为指针操作接近底层,所以容易引发一些与烦琐细节有关的错误,导致使用指针与数组容易出错。
因此C++程序应尽量使用vector和迭代器,避免使用内置数组和指针;尽量使用string,避免使用C风格的基于数组的字符串。
(4) 多维数组
多维数组就是数组的数组。
int a[3][4];int b[10][20][30] = {0};int c[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11}};操作多维数组也是使用下标,如:
for (auto &row : a){ for (auto &col : row) { col = 1; }}由多维数组名得来的指针实际上是指向第一个内层数组的指针
- 我读C++ Primer - string vector 与数组
- c++primer 第三章数组 string vector
- C++Primer笔记(包含string、vector和数组指针)
- C++Primer--string、vector、iterator
- C++Primer Plus U4读书笔记 vector array string + primer
- [C++ Primer]string & Vector
- C++primer习题3.14 vector<string>读写字符
- c++primer第三章字符串,vector,数组小结-3
- c++primer之vector
- 『C++ Primer学习笔记』Chapter 3——string对象、vector对象以及数组的配套类型,C风格字符串问题和处理区别
- C++primer 3 string
- c++primer之string
- c++primer:string.size()
- C++primer:string流
- c++primer学习之路(4)——string和vector
- C++Primer笔记--vector 对象 string 对象的下标操作警告
- C++primer第十六章string与STL(1)
- C++primer(第五版)第三章中标准库类型Vector、迭代器和数组
- Android开发文件访问权限
- android指南针
- 设计模式9—Façade设计模式
- Matlab中下标及希腊字母的使用方法
- Java 网络编程
- 我读C++ Primer - string vector 与数组
- C# 事件的继承
- IM跨语言客户端与服务器框架一览
- HLS流媒体点播系统
- [2134]数据结构实验之栈四:括号匹配 sdutOJ
- 将整型转为16进制字符串
- Flex 登陆框添加图片
- JSON相关
- 简单窗体使用委托、事件传值