shared_ptr
使用shared_ptr必须定义包含文件
#include <boost/shared_ptr.hpp>
#include <memory>
并做声明
using boost::shared_ptr;
string 和 int long 等相互转换
to string
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
string -> int/long
std::stoi
std::stol
std::stoll
map
map.begin()指向map的第一个元素,而 map.end()指向map的最后一个元素之后的地址,无论执行map.erase(iter)还是map.add(key, value),map.end()所返回的值永远不会发生变化,都是指向同一块内存。
map.lower_bound()返回的是大于某个键值的元素
map.upper_bound()返回的是不小于某个键值的元素
不过在具体编程过程中,如果设置为降序排列,lower_bound的返回值就不是map中的元素
map的第三个参数的意义和map.size的含义
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
> class map;
less_equal是按key值升序排列,greater_equal是降序排列,而同一个key值后面跟的值按照降序排列
map.size()返回的是哈西对的个数,key和T有一个不同即为不同对
#include <iostream>
#include <map>
#include <functional>
using namespace std;
int main()
{
map<int, int, greater_equal<int>> m_greater;
map<int, int, less_equal<int>> m_less;
for(int i = 15; i < 20; i ++)
for(int j = 45; j < 50; j ++)
{
m_greater.emplace(i, j);
m_less.emplace(i, j);
}
cout << "m_greater: " << endl;
for(auto &c: m_greater)cout << c.first << "->"<< c.second << endl;
cout << "m_less: " << endl;
for(auto &c: m_less)cout << c.first << "->"<< c.second << endl;
cout << "map.size(): " << m_greater.size() << "," << m_less.size() << endl;
}
结果如下:
CHECK_XX
\#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
\#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
\#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
\#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)
\#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
\#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)
使用宏定义定义检测val1和val2的值,若不符合定义的符号则返回错误信息
删除文件
使用remove函数
remove("~\files\1.txt")
文件流控制时参数设置
ios::in 为输入(读)而打开一个文件
ios::out //为输出(写)而打开文件
ios::ate //初始位置:文件尾
ios::app //所有输出附加在文件末尾
ios::trunc //如果文件已存在则先删除该文件
ios::binary //二进制方式
bug error: passing ‘XXX’ as ‘this’ argument of ‘XXX’
C++中const 引用的是对象时只能访问该对象的const 函数,因为其他函数有可能会修改该对象的成员,编译器为了避免该类事情发生,会认为调用非const函数是错误的,即const函数只能调用const函数