《剑指offer》学习心得第一日
来源:互联网 发布:硬盘坏了数据还在吗 编辑:程序博客网 时间:2024/05/17 07:52
马上就要毕业了,找工作的压力随之而来,这段时间决定好好准备一下,记一下学习笔记,开始吧。
一、operator = 函数
直接上代码:
CMyString& CMyString::operator=(const CMyString &str){if (this != &str){CMyString strTemp(str);char* pTemp = strTemp.m_pData;strTemp.m_pData = m_pData;m_pData = pTemp;}return *this;}
要点:
1、返回值应该声明为该类型的引用,并返回*this,这样才可以连续赋值。
2、参数为const引用
3、先判断是否为本身赋值
4、建立临时变量先把str给临时变量(通过copy constructor)然后交换指针指向,这样做的好处是可以保证“异常安全”,if结束strTemp被析构,释放原先m_pData的内容
二、Singleton模式
代码如下:
class Singleton { public: ~Singleton(){} static Singleton* Instance() { if (_instance == NULL) { _instance = new Singleton(); } return _instance; } protected: Singleton(){} static Singleton* _instance; }; Singleton* Singleton::_instance = NULL;
要点:
1、constructor函数设置为protected,至于为何不是private,是因为这样可以作为基类被继承,详见《more effective c++》
2、不要忘记静态成员变量的初始化。
三、关于数组
int GetSize(int data[]){return sizeof(data);}int data1[] = {1,2,3,4,5};int *data2 = data1;printsizeof(data1);sizeof(data2);GetSize(data1);
输出20,4,4 最后一个是4,因为数组作为参数传递时退化为指针,C/C++没有记录数组大小,用指针访问时,程序员要确保没有越界访问。
四、关于字符串
char str1[] = "hello world";char str2[] = "hello world";char *str3 = "hello world";char *str4 = "hello world";
str!=str2
str3 == str4
不难理解,str1和str2地址不同,分配有个自己的空间,str3和str4指向的是字符串常量,内存中地址相同。
五、替换字符串中的空格
We are happy输出We%20are%20happy
时间复杂度为O(n)的算法是,先计算出替换后的总长,然后从后往前复制,遇到空格就加入%20。
给人的第一印象就是从前往后找,遇到空格就替换,这样时间复杂度为O(n2),有时候思维应该灵活一点。
六、由二叉树的前序和中序遍历结果重建二叉树
以前在九度OJ的AC代码(递归实现):
#include <stdio.h>#include <iostream>#include <string>#include <list>#include <vector>using namespace std; typedef struct Node{ int num; struct Node* left; struct Node* right;}Node; typedef vector<int> VI; VI F;VI M; static int index = 0; bool isBiTree; Node* CreateBiTree( VI M){ if (M.size() == 0) return NULL; int num = F[index]; index++; VI l; VI r; VI::iterator iter; iter=M.begin(); while( iter != M.end() && (*iter) != num) { l.push_back(*iter); ++iter; } if (iter == M.end()) { isBiTree = false; return NULL; } ++iter; while (iter != M.end()) { r.push_back(*iter); ++iter; } Node *node = new Node; node->num = num; if (l.size() == 0) node->left = NULL; else node->left = CreateBiTree(l); if (r.size() == 0) node->right = NULL; else node->right = CreateBiTree(r); return node; } void LastPrint(Node* node){ if (node==NULL) return; LastPrint(node->left); LastPrint(node->right); printf("%d ",node->num);} int main(int argc, char* argv[]){ int n,num,i; while( scanf("%d", &n) != EOF ) { F.clear(); M.clear(); index = 0; isBiTree = true; for (i=0; i<n; ++i) { scanf("%d", &num); F.push_back(num); } for (i=0; i<n; ++i) { scanf("%d", &num); M.push_back(num); } Node* node = CreateBiTree(M); if (isBiTree == false) { printf("No\n"); } else { LastPrint(node); printf("\n"); } } }
0 0
- 《剑指offer》学习心得第一日
- 《剑指offer》学习心得第二日
- 《剑指offer》学习心得第三日
- 《剑指offer》学习心得第四日
- [剑指offer学习心得]之:第一个只出现一次的字符
- [剑指offer学习心得]之:两个链表的第一个公共结点
- 剑指offer第一题
- 剑指offer第一题
- 剑指Offer第一题
- 十月十四日学习心得
- [剑指offer学习心得]之:二维数组中的查找
- [剑指offer学习心得]之:替换空格
- [剑指offer学习心得]之:反转链表
- [剑指offer学习心得]之:二叉树的深度
- [剑指offer学习心得]之:树的子结构
- [剑指offer学习心得]之:重建二叉树
- [剑指offer学习心得]之:最小的k个数
- 第一日
- 编程题目: PAT 1013. 数素数 (20)
- Postfix + Openssl + Dovecot + Squirrelmail 搭建安全WEB邮箱服务器
- WiFi下的网上购物注意要点
- vs2008调试出现异常时触发断点位置和堆栈不正确的解决
- jquery ajax abort()方法
- 《剑指offer》学习心得第一日
- 编程之美读书笔记1.3 —— 一摞烙饼的排序
- domino环境下fckeditor编辑器无法上传图片的解决办法
- Q4.8
- 微博评论箱的隐藏Bug解决
- 转:printf()和sprintf()函数的区别和用法
- C++ STL学习之七:配接器priority_queue深入学习
- HDOJ 2079 选课时间
- java关键字详解