矢量2D擦除元素并保持字段为空

时间:2018-12-25 21:50:01

标签: c++

我知道我应该使用int而不是int *,但是只是为了强调这种情况,我的情况要复杂得多。

让我说如下:

std::vector < std::vector <int*> > board;
board.resize(1);
board[0].resize(3);
board[0][0] = new int(5);
board[0][1] = new int(6);
board[0][2] = new int(7);
board[0].erase(board[0].begin() + 1);
std::swap(board[0][0], board[0][1]);

但是我想将board [0] [1]保留为空,所以我可以插入一个新的int(8)。

1 个答案:

答案 0 :(得分:0)

不要简单地将向量的erase元素归为指针类型。您将导致内存泄漏。

如果要在指针std::vector中表示空值,则有专门为此目的创建的语言功能-nullptr。而不是像这样删除元素:

board[0].erase(board[0].begin() + 1);

简单地delete(以安全地覆盖它并且不引起内存泄漏)并用nullptr覆盖它:

delete board[0][1];
board[0][1] = nullptr;

当您需要覆盖该空值时,您可以安全地这样做:

board[0][1] = new int(10);

这样,您可以有效地从索引[0][1]中删除不需要的元素,将其标记为空值,并用新的实际值覆盖它。