《Cracking the Coding Interview》——第13章:C和C++——题目10
2014-04-25 20:47
题目:分配一个二维数组,尽量减少malloc和free的使用次数,要求能用a[i][j]的方式访问数据。
解法:有篇文章讲了六种new delete二维数组的方式,其中最后一种灰常高效。链接在此,解法六是巧妙的,不过里面的说法不对,而且还不标明转载原地址,可见这些技术网站的小编既不懂编程,也不尊重知识产权。没准这篇文章已经转载了无数次了。用这种方法创建和释放一个N维数组,只需要new和delete N次。我说的是N维,不是说长度。至于malloc和new的区别,就是C和C++的区别了。
代码:
// 13.10 Write a function in C called my2DAlloc, which allocates space for 2d array. Try to minimize the number of mallocs and frees.
#include <cstdio>
#include <cstdlib>
using namespace std; int **my2DAlloc(int row, int col)
{
if (row < || col < ) {
return nullptr;
} int i;
int **a; a = (int **)malloc(row * sizeof(int *));
a[] = (int *)malloc(row * col * sizeof(int));
for (i = ; i < row; ++i) {
a[i] = a[] + i * col;
} return a;
} void my2DFree(int **ptr)
{
if (ptr == nullptr) {
return;
}
free(ptr[]);
free(ptr);
} int main()
{
int row, col; scanf("%d%d", &row, &col);
int **a = my2DAlloc(row, col); int i, j; for (i = ; i < row; ++i) {
for (j = ; j < col; ++j) {
scanf("%d", &a[i][j]);
}
} for (i = ; i < row; ++i) {
for (j = ; j < col; ++j) {
printf("%d ", a[i][j]);
}
printf("\n");
} my2DFree(a); return ;
}
《Cracking the Coding Interview》——第13章:C和C++——题目10的更多相关文章
- Cracking the coding interview 第一章问题及解答
Cracking the coding interview 第一章问题及解答 不管是不是要挪地方,面试题具有很好的联系代码总用,参加新工作的半年里,做的大多是探索性的工作,反而代码写得少了,不高兴,最 ...
- 《Cracking the Coding Interview》读书笔记
<Cracking the Coding Interview>是适合硅谷技术面试的一本面试指南,因为题目分类清晰,风格比较靠谱,所以广受推崇. 以下是我的读书笔记,基本都是每章的课后习题解 ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- Cracking the coding interview
写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...
- Cracking the Coding Interview(Trees and Graphs)
Cracking the Coding Interview(Trees and Graphs) 树和图的训练平时相对很少,还是要加强训练一些树和图的基础算法.自己对树节点的设计应该不是很合理,多多少少 ...
- Cracking the Coding Interview(Stacks and Queues)
Cracking the Coding Interview(Stacks and Queues) 1.Describe how you could use a single array to impl ...
- 《Cracking the Coding Interview》——第18章:难题——题目13
2014-04-29 04:40 题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典.请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中. 解法:O(n^3 ...
- 《Cracking the Coding Interview》——第13章:C和C++——题目6
2014-04-25 20:07 题目:为什么基类的析构函数必须声明为虚函数? 解法:不是必须,而是应该,这是种规范.对于基类中执行的一些动态资源分配,如果基类的析构函数不是虚函数,那么 派生类的析构 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目13
2014-04-29 00:15 题目:将二叉搜索树展开成一个双向链表,要求这个链表仍是有序的,而且不能另外分配对象,就地完成. 解法:Leetcode上也有,递归解法. 代码: // 17.13 F ...
随机推荐
- centos 7(1611)安装笔记
麻烦 前天我把双系统笔记本里的 deepin 的磁盘分区直接从 Windows 7 磁盘管理里格式化了,结果悲催了,开不了机了,显示: 我以为是 Windows 7 的引导没了,就进 PE 修复了 ...
- April 16 2017 Week 16 Sunday
Happiness is a way station between too much and too little. 幸福就是刚刚好. I don't want to talk about it a ...
- Javascript作业—取字符串的第一个只出现一次的字母
js作业 取字符串第一个只出现一次的字母 <script type='text/javascript'> //取a-z字符串中第一个只出现一次的字母 function firstUniqu ...
- jQuery获取Select选择的Text和Value[转载]
语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发2. var ch ...
- 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告
点此进入比赛 得分: \(97+0+10=107\) 排名: \(Rank\ 3\) \(Rating\):\(+47\) \(T1\):[HHHOJ187]Hashit(点此看题面) 容易想到可以用 ...
- 导航栏上的item的位置设置
/** leftItem */ UIButton *leftbtn = [[UIButton alloc]initWithFrame:CGRectMake(, , , )]; [leftbtn set ...
- python 面向对象(三)--继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- war和war exploded的区别
是选择war还是war exploded 这里首先看一下他们两个的区别: (1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布: (2)war exploded模式是直接 ...
- MyEclipse 自动添加 作者 日期 等注解
使用MyEclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的. 修改作者.日期注释格式:打开Windows->Preferences->Java->C ...
- 前端JavaScript之BOM
BOM:浏览器对象模型,操作浏览器部分功能的API.比如让浏览器自动滚动. 1.window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: ...