使用擦除删除 std 向量的元素对象:a)内存处理和 b)更好的方法?

2024-01-02

我有一个vec_A存储的实例class A as: vec_A.push_back(A());

我想在稍后阶段删除向量中的一些元素,并有两个问题:a)元素被删除为:vec_A.erase(iterator)我是否需要添加任何额外的代码以确保没有内存泄漏? 。

b) 假设条件if(num <5)是如果 num 在特定的 numberList 中。鉴于此,是否有比我下面说明的更好的方法来删除向量的元素?

#include<vector>
#include<stdio.h>
#include<iostream>

class A {
      public:

             int getNumber();            
             A(int val);
             ~A(){};
      private:
              int num;
};

A::A(int val){
         num = val;
         };

int A::getNumber(){
    return num;
};

int main(){


    int i  =0;
    int num;
    std::vector<A> vec_A;
    std::vector<A>::iterator iter;

          for ( i = 0; i < 10; i++){
              vec_A.push_back(A(i));
          }
          iter = vec_A.begin();

          while(iter != vec_A.end()){
              std::cout <<  "\n --------------------------";
              std::cout <<  "\n Size before erase =" << vec_A.size();
              num = iter->getNumber() ;
              std::cout <<  "\n num = "<<num;
              if (num < 5){
                      vec_A.erase(iter);
                      }
              else{
                   iter++;
                   }

              std::cout <<  "\n size after erase =" << vec_A.size();
          }        


    std::cout << "\nPress RETURN to continue...";
    std::cin.get();

    return 0;
}

a) 元素被删除为: vec_A.erase(iterator) 有没有 我需要添加额外的代码来制作 确定没有内存泄漏? 。

是的,这就是您需要做的全部。不会出现内存泄漏。由于您没有在堆上分配对象,因此当您执行 vec_A.push_back(A()) 时,一个新对象是copied到向量中。当你擦除时,向量将负责删除元素。

假设条件 if(num

是的你可以删除/擦除 https://stackoverflow.com/questions/347441/erasing-elements-from-a-vector/347478#347478成语。这是一个例子:

 class A
{
public:
    A(int n) : m_n(n)
    {
    }

    int get() const
    {
        return m_n;
    }
private:
    int m_n;
};

bool lessThan9(const A& a)
{
    return a.get() < 9;
}

//Or if you want for a generic number
struct Remover : public std::binary_function<A,int,bool>
{
public:
    bool operator()(const A& a, int n)const
    {
        return a.get() < n;
    }
};

int main()
{
    std::vector<A> a;
    a.push_back(A(10));
    a.push_back(A(8));
    a.push_back(A(11));
    a.push_back(A(3));

    a.erase(std::remove_if(a.begin(), a.end(), lessThan9), a.end());

    //Using the user-defined functor
    a.erase(std::remove_if(a.begin(), a.end(), std::bind2nd(Remover(), 9)), a.end());

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用擦除删除 std 向量的元素对象:a)内存处理和 b)更好的方法? 的相关文章

  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • EF Core 返回 null 关系,直到直接访问

    我有一些如下所示的模型 public class Mutant public long Id get set Relations public long OriginalCodeId get set public virtual Origi
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 在一个解决方案中调用不同项目的方法

    1 个解决方案中有 3 个项目 我对第一个项目中的主文件进行的主要操作 但是我需要调用第三个项目中的方法并使用类 例如 第三个项目有 public DataClasses1DataContext base global WindowsFor
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗

随机推荐

  • 如何为自定义指令实现 ng-change

    我有一个带有模板的指令 例如 div div div 我的指令声明为 return templateUrl restrict E require ngModel scope items ngModel ngChange link funct
  • 如何获取程序中特定字符串占用的字节数?

    我使用 BSPlib 我想使用 bsp put 它要求我设置要发送的字符串的大小 即使您不熟悉 BSP 这也不是密切相关的 谢谢 乘以字符数 由下式给出 size or capacity 如果您想通过字符类型的大小了解分配的总量而不是使用的
  • 在matlab中绘制多个系列

    以下命令会产生一些非常奇怪的结果 plotyy 1 3 2 4 3 5 4 6 hold on plotyy 1 3 2 1 4 1 3 5 4 1 6 1 我基本上想在左侧 y 轴上绘制两个不同的系列 在右侧 y 轴上绘制另外两个系列 上
  • 如何使用记录器打印异常?

    我有一种情况 我想使用记录器打印 catch 块中捕获的所有异常 try File file new File C className mkdir fh new FileHandler C className className log l
  • Apache Flink RollingFileAppender

    我正在使用 Apache Flink v1 2 我想切换到滚动文件附加程序 以避免包含几天数据的巨大日志文件 然而它似乎不起作用 我调整了 log4j 配置 log4j properties 如下 log4j appender file o
  • 无法实例化 GcmBroadcastReceiver

    我尝试根据 Google 手册使用 GCM 服务创建测试应用程序https developer android com google gcm client html app https developer android com googl
  • utPLSQL:如何比较两个表?

    假设我有表 1 和表 2 表 2 是表一的更新版本 它可以具有相同或更新的结构 列和数据 我想比较这两个表 gt 使用 all tab cols 比较表结构的示例查询 根据需要添加数据类型和其他比较参数等列 SELECT t1 table
  • 当两个进程写入映射文件的同一部分时会发生什么?

    我正在编写一个 C 程序 它使用mmap系统调用 运行在 Linux 3 12 64 位上 如果我有两个进程映射具有读 写访问权限的磁盘文件的同一区域 然后同时修改两个进程的区域内容 在 msync 之前或之后 一个进程能否看到 读取 另一
  • 从 Spring 的 Rest 控制器同时支持 application/json 和 application/x-www-form-urlencoded

    我正在编写一个 REST 端点 它需要同时支持 application x www form urlencoded 和 application json 作为请求正文 我做了以下配置 RequestMapping method Reques
  • 如何将图例放置在字段集边框之外

    我正疯狂地想弄清楚如何使这项工作发挥作用 我希望图例位于边界之外 我怎样才能在保留图例标签的同时实现这一点 正如您在下面看到的 我尝试使用跨度 但它不起作用 body background color 996600 color black
  • 包结构应该与Java中的目录结构“总是”相同?

    在 Eclipse 中 包结构应该与 Java 中的目录结构相同 我尝试浏览 Oracle Java 文档的正式文档 但没有找到这条规则 此规则是否扩展到其他 IDE 例如 Netbeans 或者这是 Java 语言本身的规则 这条规则有多
  • 使用 html2canvas 打印页面

    我正在使用以下命令在我的网络上构建打印页面功能html2canvas function printthispage html2canvas mydiv onrendered function canvas var myImage canva
  • Postgresql 约束

    我似乎无法做到这一点 我正在尝试将一个字段修改为外键 并进行级联删除 我做错了什么 ALTER TABLE my table ADD CONSTRAINT 4 FOREIGN KEY my field REFERENCES my forei
  • Logcat 错误:应用程序崩溃且无法运行。根据 Logcat,setContentView 出错

    我正在开发一个基本的方程平衡应用程序 并且是 Android 开发新手 该应用程序根本不在手机上运行 我之前有一个启动屏幕作为启动器 它曾经弹出 然后应用程序就会关闭 我删除了启动屏幕 现在该应用程序无法打开 我猜测 MainActivit
  • 在 wpf 中更改控件可见性的优雅方法

    我发现了更多关于这个主题的问题 但没有找到答案 我需要更改控制单击的可见性 在win form应用程序中 如果我是对的 我可以使用类似的东西 somecontrol Visible somecontrol Visible 但是当应用程序是w
  • 参数化查询的基础知识

    我已经多次使用参数化查询 我知道它有助于防止 SQL 注入 但是 我想知道我是否可以知道参数化查询中的基本逻辑是什么 防止SQL注入可能很简单 但我不知道 我尝试在 google 上搜索它的基本内容 但每次我都找到一个如何在 Asp net
  • 如何在 AutoHotKey 中切换键盘映射

    我想将键盘的一部分映射为数字键盘 我的笔记本电脑键盘没有数字键盘 j gt 1 k gt 2 l gt 3 u gt 4 i gt 5 o gt 6 I would like to toggle the mapping with a sho
  • Java如何决定三元条件运算符表达式的类型?

    谁能解释一下吗 public class Test public static void main String args char c A int i 0 boolean b true System out println b c i S
  • html css 使 div 与文本在同一行

    我的问题是 如何避免将文本放在新行上 My code p Seating availability p p p div style width 10px height 10px background color green border 0
  • 使用擦除删除 std 向量的元素对象:a)内存处理和 b)更好的方法?

    我有一个vec A存储的实例class A as vec A push back A 我想在稍后阶段删除向量中的一些元素 并有两个问题 a 元素被删除为 vec A erase iterator 我是否需要添加任何额外的代码以确保没有内存泄