C++中将一个标识符定义为一个字符串,源程序中的标识符用字符串代替。如:
#define ADD (x,y) x+yresult=ADD(2, 3); // 使用 x+y替换 string
初始化string的方式
string s(4, 'c') // 初始化为"cccc",直接初始化string s2("hello") // 直接初始化
string s3 = "hello" //拷贝初始化
其他初始化方式省略
string的操作
getline(is, s) //从is中返回一行赋值给s,返回is其他操作省略
string::size_type类型
string.size() // 返回string.size_type,实际上是一个无符号整型数string +
string cs1 = "hello";
string cs2 = cs1 + "," + "world";
// string cs3 = "hello" + "world" + cs1; // 不能直接使用字面量相加
不能直接使用字面量相加,因为由于历史原因,字符串字面值与string不是相同的类型
string 字符的操作
使用for循环迭代操作string中的字符,注意如果需要修改字符,需要使用引用,如下所示:
string fs("Hello,world");for (auto &item : fs)
item = toupper(item);
std::cout << fs << std::endl; // 输出HELLO,WORLD
使用索引来访问字符串中的元素,需要注意的是,索引的类型也是 string::size_type
在c++标准中并不要求检查下标是否合法,如果一个下标超出了范围,则可能有不可预知的后果。
vector的初始化
c++提供多种初始化方式
vector<int> v1 = {1,2,3} // 拷贝初始化vector<int> v2 {1, 2, 3} // 列表初始化
vector<int> v3(10, 1) //初始化10个1
vector的长度: size函数返回的是vector对象中元素的个数,类型是vector<xxx>:size_type类型
试图用下标的形式访问一个不存在的元素将引发错误,不过这种错误不会被编译器发现,而是在运行时产生一个不可预知的错误。(例如缓冲区溢出(buffer overflow))
迭代器使用迭代器:使用begin和end函数返回迭代器,其中begin成员负责返回指向第一个元素的迭代器,end成员函数返回指向容器(或string对象)尾元素的下一位置。
迭代器的*iter操作返回的是迭代器iter的引用??是否可以将iter本身理解为引用?
string sv = "some thing";if(sv.begin() != sv.end()){
auto it = sv.begin();
*it = toupper(*it); // 使用*操作符解引用
}
泛型编程: