3.1using
using namespace std;
用以代替std::cin等等
3.2string
3.2.1string初始化
string s1; //默认初始化,空串
string s2(s1); //
string s2 = s1; //
string s3("value"); //注意此处不会复制最后的\0
string s3 = "value"; //
string s4(n, 'c'); //
使用等号的,称之为拷贝初始化;否则称之为直接初始化
3.2.2string对象的操作
is << s //s写入输入流,返回os;读取时自动无视前面的空格从真正的字符开始,直到遇见下一处空白
os >> s //
getline(is, s) //获取一整行输入到is中,返回is
s.empty() //
s.size() //
s[n] //
s1 + s2 //
s1 = s2 //
s1 == s2 //
<, >, <=, >= //
读取未知数目的string:
while(cin >> word)
cout << word << endl;
使用getline:
while(getline(cin, line))
cout << line << endl;
对字符的处理:
#include<cctype>
isalnum(c); //c为字母或数字
isalpha(c); //字母
iscntrl(c); //控制类型
isdigit(c); //数字
isgraph(c); //不是空格,但是可以打印
isslower(c); //小写字母
issupper(c); //大写字母
isprint(c); //c是可打印字符
//等等
对字符的处理:
string s("Hello");
for (auto &c : s)
c = toupper(c); //使用引用才能改变,类似函数调用
cout << s << endl;
3.3vector
vector是模板而非对象
初始化:
vector<int> vec1; //默认初始化
vector<int> vec2(vec1); //利用另一个vec初始化
vector<int> vec3(n, val); //创建指定数量相同元素
vector<int> vec4(n); //创建指定数量初始化元素
vector<int> vec5{val1, val2, ...} //列表初始化
vector<int> vec6(begin(arr), end(arr));//C风格初始化 左闭右开
//注意区分花括号和圆括号
//花括号表示为列表初始化
//圆括号表示为构造(construct)
//如果花括号内值不能用来初始化,考虑是否是圆括号同等作用
添加元素:
string word;
vector<string> text;
while(cin >> word){
text.push_back(word);
}
其余操作
v.empty()
v.size()
v.resize(n)
v.push_back(t)
t = v[n]
v[n] = t //仅当v[n]已经存在时
3.4iterator
运算操作:
*iter
iter -> mem
++iter
--iter
==
!=
iter += n
iter -= n
iter1 - iter2
>, <, >=, <=
//迭代器相减结果为difference_type类型
简单示例:
//字符串首个单词大写
for (auto iter = vec.begin(); iter != vec.end() && !isspace(*iter); iter++)
*iter = toupper(*iter);
const相关
vector<int> v;
const vector<int> cv;
auto it1 = v.begin(); //iterator
auto it2 = cv.begin(); //const_iterator
auto it3 = v.cbegin(); //const_itrator
箭头运算符
(*it).empty()
iter -> empty()
//等价
限制;
不能在范围for中向vector添加元素
push_back等改变vector容量的操作
3.5数组
不允许auto根据列表判断
不允许拷贝、赋值
常用size_t类型
3.5.1数组与指针
用到数组名字的地方,编译器自动替换为指向数组首元素的指针
对于auto和decltype的区别:
//使用auto时,解析成指针
int ia[] = {0, 1, 2};
auto ia2(ia);
//ia2为整形指针,指向ia数组的第一个元素
//使用decltype时,解析为数组
decltype(ia) ia3 = {1, 2, 3, 4};
ia3[2] = 0;
指针也能作为迭代器
可以通过末尾的下一个下标获取尾后指针
C++11中数组同样含有begin和end,定义在iterator头文件中
指针相减为ptrdiff_t类型
内置的下标可以使用负数:
int *p = &a[2];
int t = p[-2];//a[0]
3.5.2C风格字符串
典型风格为末尾自动添加’\0’
标准库函数:
#include<cstring>
strlen(s); //返回长度,不计末尾空字符
strcmp(s1, s2); //== ret 0; > ret 正 ...
strcat(s1, s2); //p2附加到p1后面
strcpy(s1, s2); //p2拷贝到p1上
3.6多维数组
与上一节类似