int main(){
string line;
while(getline(cin,line)){
//每次读取一整行,直至文件末尾
cout<<line<<endl;
}
}
string s = "a string";
cout<<s.size()<<endl;
string s1 = "hello"; string s2 = "world";
string s3 = s1 + "," + s2 + "\n"; //正确
string s4 = "hello" + ","; //错误,不能将字面值直接相加
string s5 = "hello" + "," + s2;
//错误,不能将字面值直接相加
string s1;
string s2(s1); //s2是s1的副本
string s3("value");
string s3 = "value";
string s4(n,'c'); //s4是由n个字符c组成的串
isalpha(c) //是否为字母
isalnum(c) //是否为字母或数字
isdigit(c) //是否为数字
islower(c) //是否为小写字母
isupper(c) //是否为大写字母
ispunct(c) //是否为标点符号(不为字母数字,可打印空白的一种)
tolower(c) //大写字母则输出为小写,否则原样输出
toupper(c) //转化为大写字母
string str("some thing");
for(auto c : str){
cout<<c<<endl;
}
若要改变字符串中的字符,可以采用传引用的方式。
string str("some thing");
for(auto &c: str){
c = toupper(c);
}
vector<T> v1;
vector<T> v2(v1); //v2中包含v1所有元素的副本
vector<T> v2 = v1; //同v2(v1)
vector<T> v3(n,val) //v3中含有n个值为val的值
vector<T> v4(n) //v4包含了n个执行初始值的对象
vector<T> v5{a,b,c ...} //v5包含了初始值个数的元素,每个元素被赋予了相应的初始值
vector<T> v5 = {a,b,c ...} //同v5{a,b,c ...}
vector<int>::size_type; //正确
vector::sizetype //错误
vector<int>::iterator it;
string::iterator it2;
vector<int>::const_iterator it3; //it3为只读迭代器,只能读元素,不能写元素
vector<int>::const_iterator it4;
vector<int> v1;
auto it4 = v1.begin() //it4为vector<int>::iterator类型
auto it5 = v1.cbegin() //it5为vector<int>::const_iterator类型
*iter //返回iter指向元素的引用
iter->mem //解引用并取元素,等同于(*iter).mem
++iter
--iter //返回容器下一个(上一个)元素
iter1 == iter2 //指向同一个元素或同时指向容器尾部迭代器时为真
iter + n //迭代器后移n个单位
iter1 - iter2 //iter1元素与iter2之间距离的差值
// >、>=、<、<= //比较两个迭代器指向的位置
vector<int> a(10,0);
for(auto i = a.begin();i != a.end();i++){
a[i] += i;
}
const unsigned int sz = 3;
int a[sz];
int b[5] = {1,2,3}; //利用初始值初始化考前元素,其余值为默认值,数组值为{1,2,3,0,0}
string s[3] = {"hi","bye"} //数组初始值为{"hi","bye",""}
int d[] = {1,2,3,4,5}; //不指定size,直接初始化
int *ptr[10]; //ptrs是一个含有10个整型指针的数组
int &ref[10]; //错误:不存在引用的数组
int (*Parray)[10]; //Parray指向一个含10个int类型整数的数组
int (&arrRef)[10]; //arrRef是一个含10个int类型整数数组的引用
使用数组下标时,可以将其定义为 size_t 类型。size_t 是一种机器相关的无符号整数,它被设计得足够大以便保存内存内任意对象的大小。
字符数组可以使用字符串初始化,但字符串末尾有一个'\0'空字符,也会被添加到字符数组中。
char a[] = {'c','+','+'};
char b[] = {'c','+','+','\0'};
char c[] = "C++";
char d[3] = "C++"; //错误,没有空间可以存放空字符。
在很多用到数组名字的地方,编译期会将其替换成指向数组首元素的指针。
string nums[] = {"one","two","three"};
string *p = nums; //p是一个指向nums[0]的指针
指向数组元素的指针有更多的功能(较与容器迭代器),vector 与 string 迭代器支持的功能,指向数组元素的指针均支持。C++11 新标准还引入了两个 begin()和 end()两个函数,返回指向数组收尾元素的指针。
int a[] = {1,2,3,4,5};
int *p = a;
++p;
int *p1 = begin(a);
int *p2 = end(a);
for(auto p1 = begin(a);p1!= end(a);i++){ //使用数组指针进行遍历
cout<<*p1<<" ";
}