DREAM OF TECHNICAL ACHIEVEMENT

0%

Queue简介

queue是队列容器,是一种“先进先出”的容器。

头文件 #include <queue>

queue对象的默认构造

queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;
如:

  • queue<int> queInt; //一个存放int的queue容器。
  • queue<float> queFloat; //一个存放float的queue容器。
  • queue<string> queString; //一个存放string的queue容器。
  • queue<xxxx> queXxxx; //一个存放xxxx的queue容器。

尖括号内还可以设置指针类型或自定义类型。

阅读全文 »

Stack简介

  • stack是堆栈容器,是一种“先进后出”的容器。
  • stack是简单地装饰deque容器而成为另外的一种容器。

头文件 #include <stack>

stack对象的默认构造

stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT;

  • stack <int> stkInt; //一个存放int的stack容器。
  • stack <float> stkFloat; //一个存放float的stack容器。
  • stack <string> stkString; //一个存放string的stack容器。
  • stack <xxx> xxx; //尖括号内还可以设置指针类型或自定义类型。
阅读全文 »

Deque简介

  • deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。
  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。
  • deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。

头文件#include <deque>

deque对象的默认构造

deque采用模板类实现,deque对象的默认构造形式:deque<T> deqT;

1
2
3
4
deque <int> deqInt;            //一个存放int的deque容器。
deque <float> deq Float; //一个存放float的deque容器。
deque <string> deq String; //一个存放string的deque容器。
deque <xxx> deq xxx; //尖括号内还可以设置指针类型或自定义类型。
阅读全文 »

Vector容器

Vector容器简介

  • vector是将元素置于一个动态数组中加以管理的容器。
  • vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。
  • vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时

vector对象的默认构造

vector采用模板类实现,vector对象的默认构造形式

  • vector<T> vecT;
  • vector<int> vecInt; //一个存放int的vector容器。
  • vector<float> vecFloat; //一个存放float的vector容器。
  • vector<string> vecString; //一个存放string的vector容器。
  • vector<xxx> vecXxx; //尖括号内还可以设置指针类型或自定义类型。
阅读全文 »

String概念

string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是用char表示的。string与char都可以用来表示字符串,那么二者有什么区别呢。

string和char*的比较

  • string是一个类, char*是一个指向字符的指针。
  • string封装了char,管理这个字符串,是一个char型的容器。
  • string不用考虑内存释放和越界。
  • string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。
  • string提供了一系列的字符串操作函数.查找find,拷贝copy,删除erase,替换replace,插入insert

string的构造函数

默认构造函数:

  • string(); //构造一个空的字符串string s1。
阅读全文 »

STL(标准模板库)理论基础

基本概念

STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。

STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack><utility>

阅读全文 »

说到类型转换我们不得不提起C语言的类型转换,简单粗暴.
Type t = (Type) 123

c++ 类型转换

类型 描述
static_cast 一般的转换
dynamic_cast 通常在基类和派生类之间转换时使用
const_cast 主要针对const的转换
reinterpret_cast 用于进行没有任何关联之间的转换,比如一个字符指针转换为整形数

static_cast

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;
// static_cast
class Building{};
class Animal{};
class Cat : public Animal{};
void test1(){
int a = 97;

// 普通类型
char c = static_cast<char>(a);
cout << c << endl;

// 转换具有继承关系的对象指针 父转子
Animal *ani = NULL;
Cat *cat1 = static_cast<Cat *>(ani);

// 转换具有继承关系的对象指针 子转父
Cat * soncat = NULL;
Animal *ani1 = static_cast<Animal *>(soncat);

// 转换具有继承关系的对象引用 父转子
Animal aniobj;
Animal &animal = aniobj;
Cat &cat = static_cast<Cat &>(animal);

// 转换具有继承关系的对象引用 子转父
Cat catobj;
Cat &catref = catobj;
Animal &ani2 = static_cast<Animal &>(catref);

// 基础数据类型指针 错误
// error: static_cast from 'int *' to 'char *' is not allowed
// int *p = NULL;
// char *sp = static_cast<char*>(p);

// 对象指针 错误
// error: static_cast from 'Building *' to 'Animal *', which are not related by inheritance, is not allowed
// Building *bui = NULL;
// Animal *ani = static_cast<Animal *>(bui);

}

int main() {
test1();
return 0;
}
阅读全文 »

为了交换不同类型的变量的值,我们通过函数重载定义了四个名字相同、参数列表不同的函数.如下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//交换 int 变量的值
void Swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
//交换 float 变量的值
void Swap(float *a, float *b){
float temp = *a;
*a = *b;
*b = temp;
}
//交换 char 变量的值
void Swap(char *a, char *b){
char temp = *a;
*a = *b;
*b = temp;
}
//交换 bool 变量的值
void Swap(bool *a, bool *b){
char temp = *a;
*a = *b;
*b = temp;
}

阅读全文 »

本实现案例是参考三国诸葛亮锦囊妙计为例写demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>

using namespace std;

// 定义拆开锦囊方法的类型 可以作为左值 指向函数 TIPS *tp;
typedef void(TIPS)(void);

// 定义tip结构
struct tip
{
// 发送人
char from[64];
// 接受人
char to[64];

// 锦囊的内容 指向void tip*这些函数
TIPS *tp;
};

//打开锦囊
void open_tips(struct tip *tip_p){
cout << "打开了锦囊" << endl;
cout << "此锦囊是由" << tip_p->from << "写给" << tip_p->to << endl;
cout << "内容是" << endl;
// 通过指针调用 tip*函数
tip_p->tp();
}

// 创建锦囊
struct tip* create_tip(const char *from, char *to, TIPS *tp){
struct tip *temp = (struct tip*)malloc(sizeof(struct tip));
if(temp == NULL){
return NULL;
}
strcpy(temp->from, from);
strcpy(temp->to, to);
temp->tp = tp;

return temp;
}

// 销毁锦囊
void destory_tip(struct tip * tp){
free(tp);
}
///////////// 实现层 ///////////////
void tip1(void)
{
cout << "一到东吴就拜见乔国老" << endl;
}
void tip2(void)
{
cout << "如果主公乐不思蜀,就谎称曹贼来袭.赶快回来" << endl;
}
void tip3(void)
{
cout << "如果被孙权追杀,就向貂蝉求救" << endl;
}


int main() {
//
struct tip *tp_1 = create_tip("孔明","赵云",tip1);
struct tip *tp_2 = create_tip("孔明","赵云",tip2);
struct tip *tp_3 = create_tip("孔明","赵云",tip3);

cout << "刚刚来到东吴,赵云打开了第一个锦囊" << endl;
open_tips(tp_1);
cout << "====================================" << endl;
cout << "刘备乐不思蜀,赵云打开了第二个锦娘" << endl;
open_tips(tp_2);
cout << "====================================" << endl;
cout << "孙权大军追杀,赵云打开了第三个锦娘" << endl;
open_tips(tp_3);

destory_tip(tp_1);
destory_tip(tp_2);
destory_tip(tp_3);
return 0;
}
阅读全文 »

c++ 写了一个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>

using namespace std;

typedef void(TIPS)(void);

struct tip
{
char from[64];
char to[64];

TIPS *tp;
};

struct tip* create_tip(char *from,char *to, TIPS *tp){
struct tip *temp = (struct tip*)malloc(sizeof(struct tip));
if(temp == NULL){
return NULL;
}
strcpy(temp->from, from);
strcpy(temp->to, to);
temp->tp = tp;

return temp;
}
阅读全文 »