C++平时积累

  1. vector容器维度赋值
vector<vector<int>>v(m,vector<int>(n));
//容器由m个维数为n的容器组成
//调用第x个容器的第y个元素
dp[x][y];
这时**默认填充**dp[x][y]=0;


vector<int>v1(m1);//m1个元素
  • enum枚举
    #define命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。

    枚举类型的定义形式为:

  • enum typeName{ valueName1, valueName2, valueName3, … };

例如:默认从0开始,不过也可以定义Mon=1,这样就从1开始了

enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun }

3.有关哈希表
参考剑指offer20题
哈希表嵌套

unordered_map<int,unordered_map<int,char>>map={
	{1,{{1,'a'},{2,'b'}}},
	{2,{{3,'a'},{4,'b'}}}
	}

寻找某个值,如果没有
可以写
map[2].find(5)==map[2].end();//查到最后一个都没查到,即为这个哈希表值不存在
4.字符串和数字转换完全攻略
数字转字符串
C++ 11 提供了若干 to_string(T value) 函数来将 T 类型的数字值转换为字符串形式。以下是几个 to_string() 函数的列表:

string to_string(int value)
string to_string(long value)
string to_string(double value)

int a = 5;
string str = to_string(a*a);
cout << " The square of 5 is " << str << endl;

字符串转数字
需要包含头文件**#include< string>**
字符串到数字的转换可以通过 stoX() 系列函数来执行。该系列函数的成员可以将字符串转换为 int、long、float 和 double 类型的数字。具体语法如下所示:
int stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)

第一个形参 str 是一个字符串(例如 “-342” 或 “3.48” 等),它将被转换为恰当的数字形式。这些函数可以将 str 可能的最长前缀转换为数字,并返回一个整数地址 pos,pos 中保存了 str 无法被转换的第一个字符的索引。类型 size_t (unsigned int)是在标准库中定义的,常用于表示无符号整数的大小或数组、矢量、字符串中的一个索引。

例如,如果试图转换字符串 “-34iseven”,则将成功返回整数 -34,而无法转换的第一个字符的位置 pos 则被设置为 3。base 形参仅适用于整数转换,指示用于转换的进制。pos 和 base 形参都是可选的,所以它们可以被忽略。如果 pos 被忽略,则不会存储停止字符的索引。如果 base 被忽略,则默认为十进制。如果字符串 str 包含一个无效值,例如 “is-34 even?”,则不会进行转换,函数将抛出一个 invalid_argument 异常。

	string str; // string to convert
    size_t pos; // Hold position of stopping character
    //Convert string to double
    str = "-342.57is a number";
    cout << "The string is " << str << endl;
    double d = stod(str, &pos);
    cout << "The converted double is " << d << endl;
    cout << "The stopping character is " << str[pos] << " at position " << pos << 		endl;

使用字符串流的转换详见:字符串流转换
5.常量指针和指针常量以及常量指针常量
总结:

(1) 指针本身是常量不可变

(char*) const pContent;

const (char*) pContent;

(2) 指针所指向的内容是常量不可变

const (char) *pContent;

(char) const *pContent;

(3) 两者都不可变

const char* const pContent;

还有其中区别方法:

沿着*号划一条线,

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量,称为常量指针

如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量,称为指针常量
6.#if 和 #endif
#if 和 #endif 作用类似if(){ }
但是这个好处是 可以根据A的设置 0转变为一个注释,编译的时候就不会编译,转去编译2根据不同情况实行
#if A
表达式1
#else
表达式2
#endif
另外可以防止重定义

#ifndef 标识符
	#define 标识符
	程序文本
	#endif

7.try catch throw

    try // c++异常的处理方式
    {
        // 包含可能抛出异常的语句
    }
    catch(类型名[形参名]) // 捕获特定类型的异常
    {
        // 处理异常的语句 条件是抛出的异常类型是与catch参数类型匹配
    }
    // try捕获异常并不能保证程序就不会崩溃,通常还需要做一下两个操作
    // 1、满足某个条件是显式抛出(throw)一个异常
    // 2、使用catch匹配异常类型 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值