c++ string

最近准备Google面试,写图形学项目发现自己c++菜的一逼…于是准备记录一些c++的学习笔记orz

const char* vs. std::string

定义

  • string 是c++的class,变量内存空间存放字符序列
  • const char* 只是一个指向存放字符序列的内存区域的指针,变量内存空间只存放指针

拷贝

明显可以看出拷贝const char*只需要拷贝指针, 而拷贝string需要复制整个内存区域

互相转换

  • const char* 可以被隐式转换为 string
    • 从指针指向的地方开始复制字符
  • string需要使用c_str() 来转换为const char*,同时这意味着失去string中方便的函数

常用操作

迭代器 iterator

1
2
3
4
std::string s = "";
for(std::string::iterator it = s.begin(); s!= it.end(); it++){
std::cout << (*it) << std::endl;
}

子串 slice

1
std::string sub = s.substr(0,2);

长度 length

1
2
std::string s = "ABB";
std::cout << s.length() << std::endl;

求string类型下标为i的字符

1
2
s[i]
char c=s.at(i)

查找t是否为s的子串

1
s.find(t);

返回值: 子串的起始下标或者string::npos

npos是啥

static const size_t npos = -1

而size_t是unsigned,这说明npos是size_t类型变量的最大值

1
std::cout << (std::string::npos == -1) ; // 1