string
getline(cin,s); 读取一行
cin读入会自动忽略开头的空白(空格符 换行符 制表符)从第一个真正的字符读起,直到遇到下一处空白为止
getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读取内容,直到遇到换行符(换行符也被读入),之后将所存内容存入到string对象中(不存换行符)
size()函数返回值是size_type 无符号类型 能够存放任何string对象的大小。
int main()
{
string s("makise kurisu");
for(auto &c:s) //使用引用
c=toupper(c); //给c赋值可改变原值
cout<<s<<endl;
return 0;
}
将s变为大写字符串
c++定义了箭头运算符,箭头运算符把解引用和成员访问两个操作结合在一起 it->mem 等同于 (*it).mem
数组
int *ptrs[10]; //含有3个整数的数组
int (*Parray)[10]=&arr; //Parray指向一个含有10整数的数组
int (&arrRef)[10]=arr; //arrRef引用一个含有10整数的数组
标准库函数 begin end 可获取数组的头指针和尾指针
int main()
{
int a[3]={1,2,3};
int *beg=begin(a),*ed=end(a);
while(beg!=ed) cout<<*beg<<endl,beg++;
}
int main()
{
int a[5]={1,2,3,4,5};
int *p=&a[2]; //p指向索引为2的元素
int j=p[1]; //j指向*(p+1) 即a[3]
int k=p[-2]; //k指向*(p-2) 即a[0];
}
任何出现字符串字面值的地方都可以用以空字符结束的字符数组替代
*允许使用以空字符结束的字符数组来初始化string对象或者为string对象赋值
*在string对象的加法运算中允许使用以空字符结束的字符数组作为其中一个运算对象(不能两个运算对象都是),在string对象的复合赋值运算中允许使用以空字符结束的字符数组作为右侧的运算对象。
string专门提供了名为 c_str的成员函数 返回值是一个c风格的字符串 指针的类型是 const char* 从而保证我们不会改变字符数组的内容
int main()
{
string s="hello world";
const char *str=s.c_str();
}
不允许使用vector初始化数组,相反允许使用数组初始化vector。
int main()
{
int a[5]={1,2,3,4,5};
vector<int> v(begin(a),end(a)); //储存a数组一样的内容
vector<int> v1(a+1,a+4); //储存a[1] a[2] a[3]
}
现代c++程序应当尽量使用vector和迭代器以及string,避免使用内置数组和指针和c风格字符串
多维数组
严格来讲,c++语言没有多维数组,只有数组的数组