标签:
一、string
1、包含头文件string; 命名空间std
#include<string> using std::string
2、读取操作时,string对象会自动忽略开头的空白,直到遇到下一个空白
如果想要保留空白,使用getline函数:读到换行符为止,但不把换行符写入到string中
string s1, s2, s3; cin >> s1 >> s2; //输入“ hello world ” cout << s1 << s2 << endl; //得到“helloworld” getline(cin, s3); //输入 “ hello world ” cout << s3 << endl; //得到 “ hello world ”
3、string 可以得到长度,使用size()函数,返回的是一个无符号型整数,所以要注意在用于循环判断时不要与有符号数一起使用
4、string对象的比较,先会比较长度,如果相同,再比较第一个相异的字符
5、string对象的相加:+号两边必须有一遍是string类型
6、通常C++程序的头文件为cname,而C程序头文件为name.h
7、范围for
for(declaration : expression) //每次迭代,declaration部分会被初始化为expression部分的下一个元素 statement
string s("Hello World"); for(auto &c : s) //定义成引用类型,则可以改变s的值 c = toupper(c); cout << s << endl;
二、vector:对象的集合;是一个类模板
1、初始化
vector <int> v1(10); //v1有10个元素,每个默认初始化为0 vector <int> v(10, 1); //v2有10个元素,每个都初始化为1
vecotr<string> v3{"hello", "world"}; //用里面的两个值列表初始化
2、添加元素:v.push_back(t):向尾部添加一个值为t的元素
三、迭代器:所有的标准库容器都可以使用迭代器,但是只有string和vector,map支持下标运算符;
1、begin和end成员:end成员返回指向容器”尾元素的下一个位置”
auto b = v.begin(), e = v.end(); //b和e的类型相同;我们并不在意迭代器的准确类型是什么
2、如果对象只是用于读,而不用写操作则最好使用常量类型,引用cbegin和cend函数
auto it = v.cbegin() //类型为vector<int> :: const_iterator
3、解引用迭代器:可获得迭代器所指的对象,如果该对象的类型恰好是类则可以进一步访问成员
(*it).empty() ======== it->empty()
四、数组
1、C++ 11引入了begin和end的函数,与迭代器的begin,end效果相同
2、C库中的string函数,如strlen,strcmp,strcat,strcpy,传入函数的指针必须以空字符作为结束的数组
3、string类型->const char *类型,使用c_str()函数
char *str = s; const char *str = s.c_str();
4、用数组来初始化vector对象,只需要指明拷贝区域的首元素地址和尾后地址
int arr[] = {0, 1, 2, 3, 4, 5}; vector<int> ivec(begin(arr), end(arr));
5、在C++中尽量使用vector和迭代器,避免使用内置数组和指针
string和vector的其他内容在后面章节再补充
标签:
原文地址:http://www.cnblogs.com/dylqt/p/4826080.html