如何从向量中移除值的第一个出现
How do I remove the first occurrence of a value from a vector?
我试图从向量中获取一个元素,并将其推到向量的后面,然后将其移除,这样内存中就不会有空的部分。擦除-删除习惯用法可以做到这一点,但它会删除特定值的所有实例。我只想去掉第一个。
我对标准库算法没有太多经验,也找不到合适的方法(如果有的话)来做这件事。这里有一个例子:
int main() {
std::vector<int> v{1, 2, 3, 3, 4};
remove_first(v, 3);
std::cout << v; // 1, 2, 3, 4
}
那么,我该如何从这个向量中去除第一次出现的3呢?
先找到它,然后擦除它:
auto it = std::find(v.begin(),v.end(),3);
// check that there actually is a 3 in our vector
if (it != v.end()) {
v.erase(it);
}
如果你不关心维护向量中元素的顺序,你可以避免擦除时剩余元素的"尾部"的复制:
auto it = std::find(v.begin(), v.end(), 3);
if (it != v.end()) {
std::iter_swap(it, v.end() - 1);
v.erase(v.end() - 1);
}
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- C++有效地找到向量中第一个最接近的匹配值?
- c++:交换向量中所有元组的第一个和第二个元素
- C++ - 同时对向量的第一个和第二个进行排序
- 删除C++中向量中第一个最小的数字(并保持顺序)
- "如何使用C++将字符串的第一个和最后一个索引返回到向量中?
- 在我为我的二维向量提供第一个值后控制台关闭
- 访问指向对象指针向量的指针的第一个元素?
- 比较第一个向量的不同矢量迭代器和擦除元素
- C++ 只有第一个向量完成,push_back,cin,for 循环
- 基于其第一个向量元素在结构中进行排序
- 根据C++中成对的第一个向量进行排序
- 当第一个向量重新分配时,另一个向量中的 std::向量会重新分配吗?
- 创建我的第一个向量 [Visual Studio 2013] 时出错
- C++ 将向量转换为<BYTE>第一个向量字节为 0 的字符串
- 根据第一个向量的元素从两个 std::vector 中删除元素
- c++推回第一个向量,并按升序对向量进行排序