c++ - 如何像擦除二维向量中的元素一样擦除一行
问题描述
我是 C++ 向量的新手,想问一个关于它的问题。我在下面构建了一个二维向量:
1 2 3
4 5 6
7 8 9
并用这些代码擦除 4...
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<vector<int>> v;
for (int i = 0; i < 3; i++) {
vector<int> r;
for (int j = 0; j < 3; j++) {
int input;
cin >> input;
r.push_back(input);
}
v.push_back(r);
}
v.at(1).erase(v.at(1).begin() + 0);//erase the 4
}
正如我们所知,5 取代了 4 并成为第二行中的第一个元素,就像这样......
1 2 3
5 6
7 8 9
但是当我试图通过...擦除或清除整个第二行时
v[1].clear();//or do v.at(1).erase(v.at(1).begin()+0) twice
矩阵变成了……
1 2 3
7 8 9
第二行的元素消失了,但第三行没有占据它的位置。我应该如何擦除(或清除)整行并制作下一行来替换它的位置?
解决方案
该clear
方法仅从向量中删除所有元素,而不是向量本身。你可以用
v[1].clear();
v.erase(v.begin() + 1);
我将更详细地解释它:v.begin()
返回一个指向外部向量的第一个元素的迭代器。v.begin() + 1
将这个迭代器前进一个指向向量 at v[1]
。v.erase(...)
获取此迭代器并删除与其关联的向量。
如果在堆上分配指针,请记住正确处理指针,否则会泄漏已用内存。
推荐阅读
- c# - 如何解决在尝试上传登录表单时出现 { upload failed with 400 - Generic/unknown HTTP error } 的问题
- javascript - 为什么两个或多个光滑的滑块不能在同一页面中工作?
- javascript - 不同类型的 Javascript 中变量赋值的视觉/实用/真实世界示例
- php - php登录表单中需要什么
- android - 我想从 Google OCR API 读取文本并存储在数据库中
- typescript - 在模块的打字稿中声明接口
- c - 无法将元素存储在链表中
- regex - bash / sed:修剪指定字符的第一个和最后一个序列
- codeigniter - 在 plesk 服务器 Codeigniter 邮件功能不能在服务器端使用 gmail 但在 localhost 中很好?
- excel - 更新范围请求返回 200 OK 但不更新 Excel 工作表