C++笔记

使用#define定义的宏,被预处理器替换后,编译器可能看不见,所以不会存在符号表中,这样调试的时候可能就没法定位了。如果使用const定义常量的方法,则会出现在符号表中 使用#define定义的宏,替换之后,可能在代码中有多份重复的目标码,但是使用const定义常量的方法,只会有一份 使用#define定义短函数,为了不出错,要加很多括号,代码难以维护,且没有作用域限制,会修改传进去的参数,而使用inline函数,一样可以获得相同的效率

想要iterator指向的不可变,用const_iterator 成员函数定义后面加了const,表示该成员函数的实现不会改变类的内容,比如里面的成员变量 有时候要写两个版本的成员函数,一个const函数,一个非const版本,在非const版本,用const_cast取消const,调用const版本的成员函数,以重用代码

在new的时候,在后面加上括号会调用默认构造函数,所以会初始化。

int *pia = new int[10]; // 10个未初始化int int *pia2 = new int10; // 10个值初始化为0的int

std::tr1::unordered_set是用哈希实现的,无序,速度比std::map要快很多,大部分情况下其实用这个比较好 同理,unordered_set和set也一样

multiset的元素可以重复,set的不可以 C++11的随机数:

include

std::random_device rd{}; auto random_number = rd();

C++11 FOR循环

include

include

int main() { std::vector v = {0, 1, 2, 3, 4, 5};

for(const int &i : v) // access by const reference
    std::cout << i << ' ';
std::cout << '\n';

for(auto i: v) // access by value, the type of i is int
    std::cout << i << ' ';
std::cout << '\n';

for(auto&& i: v) // access by reference, the type of i is int&
    std::cout << i << ' ';
std::cout << '\n';

}

c++11里面有stoi函数,std::stoi

std::sort使用快排,不稳定,所以有了std::stable_sort,使用归并排序

std::stack内部是用std::deque实现的,双端队列