概述
第二章介绍内置类型,本章介绍抽象数据类型库。
- 其中string和vector是两种最重要的标准库类型,前者支持可变长字符串,后者表示可变长的集合。
- 还有一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问string中的字符和vector中的元素。
第三章 字符串、向量和数组
头文件不应包含using声明。
标准库类型string
#include <string>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, 'c'); //s4的内容是cccccccccc
登录后复制string对象上的操作
1. cout << s2. cin >> 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 << c <<endl;
登录后复制
标准库类型vector
vector是一个类模板(class template)。vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。vector也常被称为容器(container).
定义和初始化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...}vector<T> v5 = {a,b,c...}
登录后复制
列表初始化vector对象
vector<string> articles = {"a", "an", "the"};
登录后复制
向vector对象中添加元素
运行时才知道vector对象中确切的个数:
string word;vector<string> text;while (cin >> word) { text.push_back(word); }
登录后复制vector对象能高效增长:vector能在运行时高效快速地添加元素。
如果循环体内包含有向vector对象添加元素的语句,则不能使用++范围for++循环。
push_back:把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。
vector<int> 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);
}//将迭代器从一个元素移动到另一个元素,把字符串中第一个单词改为大写//注意,使用的是!=,而不是<for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it)
*it = toupper(*it);
登录后复制
#### 迭代器类型
拥有迭代器的标准库使用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只能读字符,不能写字符
登录后复制
参考:C++Primer第五版
第二章介绍内置类型,本章介绍抽象数据类型库。
- 其中string和vector是两种最重要的标准库类型,前者支持可变长字符串,后者表示可变长的集合。
- 还有一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问string中的字符和vector中的元素。
相关文章:
第一章C++:函数返回值、GNU编译器命令
第二章C++:变量和基本类型
以上就是第三章C++:字符串string、向量vector和数组的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是寒冷小刺猬为你收集整理的第三章C++:字符串string、向量vector和数组的全部内容,希望文章能够帮你解决第三章C++:字符串string、向量vector和数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复