string
初始化string对象的方式
string s1;
string s2(s1);
string s2=s1;
string s3(“value”);
string s3=“value”;
string s4(n,‘c’);
使用getline读取一整行
int main()
{
string line;
while(getline(cin,line))//包括空白符,出发getline函数返回的那个换行符实际上被丢弃了
cout<<line<<endl;
return 0;
}
string可以和string或字符串或字符相加
判断字符的类型 cctype
isalnum© //c是字母或数字为真
isalpha© //c是字母时为真
iscntrl© //c是控制字符时为真
isdigit© //c是数字时为真
isgraph© //c不是空格但可以打印时为真
islower© //c是小写字母时为真
isprint©//c是可打印字符时为真
ispunct© //c是标点符号时为真
isspace© //c是空白时为真
isupper©//c是大写字母时为真
isxdigit© //c是16进制数字时为真
tolower© //大写转小写
toupper© //小写转大写
C++11遍历string
string str;
for(auto c:str)
cout<<c<<endl;
迭代器
auto b=v.begin();//首元素
auto e=v.end();//尾元素的下一位置!!!!
数组
如果不清楚元素的确切个数,请使用vector
理解复杂的数组声明(从内向外读,从右向左读)
int (*Parry)[10]=&arr
//指向含有10个整数的数组
int (&arrref)[10]=arr;//引用一个含有10个整数的数组
C++11遍历数组
for(auto i:scores)
cout<<i<<" ";
指针和数组
使用数组的时候,编译器一般会把它转换成指针
对数组元素使用取地址符就能得到指向该元素的指针
编译器将数组名替换为指向数组首元素的指针
sizeof(数组名)=元素个数×元素所占空间
int *p=数组名;sizeof§=指针指向类型的大小
当数组作为函数的参数进行传递时,数组自动退化为同类型的指针。
在一些情况下数组的操作实际上是指针的操作
使用数组作为auto变量的初始值时,推断得到的类型是指针而不是数组。
指针也是迭代器
获取数组尾元素之后那个并不存在的指针,尾后指针不指向具体的元素,因此不能对其执行解引用等操作。
int *e=&arr[length];//length为数组维度
标准库begin(),end(),类似vector等容器的方法
int a[10]={};
int *b=begin(a);
int *e=end(a);
下标和指针
对数组执行下标运算其实是对指向数组元素的指针执行下标运算
vector等标准库类型的下标运算必须是无符号类型,数组下标等内置类型无次要求
int *p=&a[2];
int k=p[-2];//k=a[0]
使用数组初始化vector
int arr[]={0,1,2,3,4,5}
vector<int> ivec(begin(arr),end(arr));//可以得到数组头尾指针了
vector<int> ivec(arr,arr+3);//也可以拷贝一部分(arr[0],arr[1],arr[2])
多维数组
C++11范围for循环,把管理数组索引的任务交给系统来完成。
使用范围for循环,除了最内层的循环外,其它所有循环的控制变量都应该是引用类型
size_tcnt=0;
for(auto &row:ia)
for(auto &col :row)
col=cnt;
++cnt;