Java程序员的C++回归路 (4)

C++中将一个标识符定义为一个字符串,源程序中的标识符用字符串代替。如:

#define ADD (x,y) x+y
result=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);  // 使用*操作符解引用
  }

泛型编程:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpps.html