博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的c++最佳实践
阅读量:6899 次
发布时间:2019-06-27

本文共 1642 字,大约阅读时间需要 5 分钟。

迭代时删除容器中的元素

删除元素可能导致内存变动,因此迭代器会更新它的值,我们应用erase返回的新的迭代器,否则可能导致访问到不应该访问的内存。

for (auto it = container.begin(); it != container.end();) {    if (condition) {        it = container.erase(it);    } else {        it++;    }}

多维数组

STL vector

#include 
using namespace std;int main() { // construct array2D[HEIGHT][WIDTH] vector
> array2D; array2D.resize(HEIGHT); for (int i = 0; i < HEIGHT; ++i) array2D[i].resize(WIDTH); // construct array3D[HEIGHT][WIDTH][DEPTH] vector
> > array3D; array3D.resize(HEIGHT); for (int i = 0; i < HEIGHT; ++i) { array3D[i].resize(WIDTH); for (int j = 0; j < WIDTH; ++j) array3D[i][j].resize(DEPTH); } return 0;}

这种方法的好处是不用自己手动释放内存,而且数组大小可以动态变化(不过通常我们使用多维数组时不会变化它的大小)。

缺点是比较丑陋,一串vector会很长,尤其是> >不能连在一起否则编译器会认为是移位或者流提取运算符,尽管在c++11中可以连在一起写了。

指针

int main() {    // construct p2DArray[HEIGHT][WIDTH]    double **p2DArray;    p2DArray = new double*[HEIGHT];    for (int i = 0; i < HEIGHT; ++i)        p2DArray[i] = new double[WIDTH];    for (int i = 0; i < HEIGHT; ++i)        delete [] p2DArray[i];    delete [] p2DArray;    // construct p3DArray[HEIGHT][WIDTH][DEPTH]    int ***p3DArray;    p3DArray = new int**[HEIGHT];    for (int i = 0; i < HEIGHT; i++) {        p3DArray[i] = new int*[WIDTH];        for (int j = 0; j < WIDTH;j++) {            p3DArray[i][j] = new int[DEPTH];        }    }    for (int i = 0; i < HEIGHT; ++i) {        for (int j = 0; j < WIDTH; ++j) {            delete [] p3DArray[i][j];        }        delete [] p3DArray[i];    }    delete [] p3DArray;}

这样的数组简洁明了,但要自己手动释放内存, 顺序还不能错,比较容易出问题。

转载地址:http://rscdl.baihongyu.com/

你可能感兴趣的文章
AT指令(中文详解版)(三)
查看>>
如何开启默认共享?
查看>>
动态参数的存储过程示例.sql
查看>>
关于C++中enum的探讨[zz]
查看>>
TYAN_S8230做硬Raid
查看>>
AutoResetEvent 的诡异行为
查看>>
WAMP运行分析
查看>>
DBA查询命令积累——不断更新
查看>>
【kAri OJ 616】Asce的树
查看>>
ACdream OJ 1153 (k-GCD)
查看>>
关于 Java 数组的 12 个最佳方法
查看>>
快钱提现
查看>>
2016去哪儿编程题:字符替换
查看>>
一个优异的经理人,碰到糟糕的企业,最后往往存在的还是那间糟糕的企业(转)...
查看>>
[转]史上最全最强SpringMVC详细示例实战教程
查看>>
VMware Tools的安装
查看>>
Linux中常用的查看系统信息的命令
查看>>
能源项目xml文件标签释义--default-lazy-init
查看>>
Android 四大组件学习之ContentProvider四
查看>>
#include &lt;sys/socket.h&gt;找不到头文件
查看>>