删除指针数组 (C++) 中的元素
deleting elements in array of pointer (C++)
假设我有一个指针数组,例如
Person** p = new Person*[5]
// p is filled with five person pointer (say p[2] = *John where John is an object of person
// now we want to remove p[2]
delete p[2];
p[2] = p[3];
p[3] = p[4];
p[4] = nullptr;
除非我删除删除和nullptr行,否则无法编译该程序。 为什么会这样?如果我不删除 p[2],应该有问题,因为我无法再次访问 john?
如果您有这种模式,请使用std::list
(或std::vector
(。标准容器将比您提出的大多数解决方案更好。
要使nullptr
起作用,您必须使用选项--std=c++11
进行编译,因为它是 C++11 中的关键字,就像auto
和 lambda 表达式语法一样。
gcc yourfile.cpp --std=c++11
但是关于delete
,它只是第一行上一个被遗忘的分号。
C/C++ 要求使用分号分隔语句。
你应该写这样的东西:
Person** p = new Person*[5]; // A semi-colon was forgotten here.
// p is filled with five person pointer (say p[2] = *John where John is an object of person
// now we want to remove p[2]
delete p[2];
p[2] = p[3];
p[3] = p[4];
p[4] = nullptr;
另外,如果您不想为--std=c++11
编译,请尝试使用0
或NULL
而不是nullptr
。
p[4] = NULL;
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素