我知道我应该使用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)。
答案 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]
中删除不需要的元素,将其标记为空值,并用新的实际值覆盖它。