本文共 5719 字,大约阅读时间需要 19 分钟。
每个名字都要独立的using声明
头文件中不应包含using语句//输入和输出字符串s#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string s; cin >> s; cout << s << endl; return 0;}
执行此程序过程中,string对象会自动忽略开头空白(空格符,换行符,制表符等等),从第一个真正的字符读起,直到下一个空白为止
注:如输入“Hello World",则输出"Hello"
//输入输出Hello World#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string s1, s2; cin >> s1 >> s2; cout << s1 <<' '<< s2 << endl; return 0;}
读取未知量的string对象
方法1:#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string word; while (cin >> word) { cout << word << endl; } return 0;}
运行结果:
方法2: 想在最终得到的字符串中保留空白符时,使用getline实现#include#include using std::getline;using std::cin; using std::cout; using std::endl; using std::string;int main(){ string line; while (getline(cin, line)) cout << line << endl; return 0;}
其中,getline属于string库
即开头需添加#include < string >
string的empty和size操作
#includestring::size_type类型#include using std::getline;using std::cin; using std::cout; using std::endl; using std::string;int main(){ string line; while (getline(cin, line)) if (!line.empty()) cout << line << endl; return 0;}
比较string对象
#include字面值和string对象相加using std::cout; using std::cin; using std::endl; using std::string;int main(){ string s1("Hello"), s2("world\n"),s3; s3 = s1 + s2; cout << s3 << endl; return 0;}
此时必须确保“+”左右至少有一个为string
#includeusing std::cout; using std::cin; using std::endl; using std::string;int main(){ string s1("Hello"),s2; s2 = s1 + '!'; cout << s2 << endl; return 0;}
#includeusing std::cin; using std::cout; using std::endl;using std::string;int main(){ string str("some string"); for (auto c : str) cout << c << endl; return 0;}
其中,通过auto关键字来确定c的类型,此处,c的类型为char
每次迭代,str下一个字符被拷贝给c,实现单个字符的输出
使用 for和 ispunct语句统计string对象中标点的数量
#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string s("Hello World!!!"); //使punct_cnt类型与s.size类型一致 decltype(s.size()) punct_cnt = 0; //统计s中的标点数 for(auto c: s) if(ispunct(c)) ++punct_cnt; cout< <<" punctation characters in "< <
使用 for语句改变字符串中的字符
将字符改为大写
#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string s("Hello World!!!"); for (auto& c : s) c = toupper(c); cout << s << endl; return 0;}
其中
变量c引用string s的单个字符,该操作改变了s中的每个字符为大写
只处理一部分字符(使用下标运算符)
将首字符改为大写:
#includeusing std::cin; using std::cout; using std::endl; using std::string;int main(){ string s("some string"); decltype(s.size()) index = 0; for (; index != s.size() && !isspace(s[index]); index++) s[index] = toupper(s[index]); cout << s << endl; return 0;}
使用下标执行随机访问
十进制转十六进制:
标准库类型vector(向量)又称为容器,容纳着其他对象
可理解格式为:模板<类型>
列表初始化vector
相当于articles包含3个元素
创建指定数量的元素
格式:vector<类型>名称(数量,内容);
值初始化根据类型的不同,库会自动对其赋初值(前提是说明了vector对象个数)
列表初始化还是元素数量? 格式: 1) {值} 2)(元素个数) 3)(元素个数,每个元素的赋值) 4){值,值}
- { }内表示对象的初值
- ( )内有表示元素个数的意思 (10),10代表元素个数 (3,10),10代表元素初值
- string中:
计算vector对象内的索引
例:统计各个分数段的人数 如:#include#include using std::cout; using std::cin; using std::endl; using std::vector;int main(){ vector scores(11, 0);//初始化各个分数层的人数 unsigned grade; while (cin >> grade) ++scores[grade/10]; for (auto i:scores) cout < <
不能用下标形式添加元素
end指向的是元素的下一元素,没有实际含义,仅是一个标记
迭代器运算符
将迭代器从一个元素移动到另一个元素
迭代器类型
begin和end运算符
begin和end的返回类型(常量/非常量)由对象绝定
cbegin和cend函数:
结合解引用和成员访问操作
注:(*it)中的()不能省略,()关系到运算的顺序
迭代器的算数运算
使迭代器指向vector的中间元素:
使用迭代器运算
使用迭代器进行二分搜索:
数组与vector用法相似,与vector不同的是,数组大小不变,不能随意向数组中添加元素
显示初始化数组元素
字符数组的特殊性
不允许拷贝和赋值
理解复杂的数组声明
注意保证数组下标值不能越界
通常情况下,数组名代表数组元素的首地址
使用auto判断依旧为指针类型
使用decltype关键字判断的类型则为数组本身
指针也是迭代器
标准库begin和end
指针运算
指针加(减)一个整数,相当于指针的位置向后(前)移动整数个单位
指针间加减相当于计算指针间的距离(仅限同一数组中的指针),运行结果得到的是ptrdiff_t类型
解引用和指针运算的交互
下标和指针
混用string对象和C风格字符串
使用数组初始化vector对象
转载地址:http://efmki.baihongyu.com/