1. 前言

没有系统地学过C++, 偶尔会把C++当作高级的C语言用下, 用下它的STL库, 有些很基础的东西都不知道。某课程的作业要求只能用C/C++写, 一动手发现全是错误, 故在此记录。

2. string类

string类经常使用, 平时还是用来连接下字符串比较多, 还有一些其他常用的方法:

substr(int, int)
str.substr(start,length) //返回str字符串start位置开始的长度为length的字符串,需要依次输出字符串中的字符时,可以变为str.substr(i,1),而不用str.at(i),因为str.at(i)返回值类型为char *

3. int转为string

直接用了toString(), 编译报错才想起来是C++不是Java啊……搜了下又不太想用itoa和sprintf, 就用了stringstream类

#include <sstream>
stringstream stream;
string str;
stream << v[i][j];                          //注意sstream输入是<<而不是iostream的>>
stream >> str;

4. queue模板类

顾名思义, queue就是队列, 这个类实现了队列的操作, 但是其pop()方法竟然不返回值, 只是删除队首元素, 要获取队首元素, 需要使用front()方法:

queue<string> que;
string head = que.front();
que.pop();

5. map类

提供了一一对应的关系, 实例化一个map类后, 添加了新元素, 想要查找其中的key, 利用了其find()方法:

map<string,int> myMap;
myMap["test"] = 1;
if( myMap.find("test") == myMap.end() ) {
    
}

更加常用的方法是count.

6. this的使用

还是受Java影响, 如下:

class A {
public:
    A(int a);
private:
    int a;
};
A::A(int a) {
    this.a = a;     //错误
    cout << this.a << endl;
}

区别在于C++中的this是指针, 而Java没有指针概念, 都是引用对象, 所以在C++中其实应该如此:

class A {
public:
    A(int a);
private:
    int a;
};
A::A(int a) {
    (*this).a = a;      //or this->a = a;
    cout << (*this).a << endl;
}