在运行时将指针推送到向量 C++

Posted

技术标签:

【中文标题】在运行时将指针推送到向量 C++【英文标题】:Push pointers to vector at runtime C++ 【发布时间】:2019-09-14 02:50:14 【问题描述】:

我的程序将读取包含 N 行的输入数据。每行包含将分配给单个对象的数据。由于所需的对象数量将在运行时确定,因此我计划在堆上为它们分配空间。

我想包含一个指向这些对象的指针向量。我的第一种方法是使用一个循环运行 N 次,并分配空间,

Customer* cust_i = new Customer

然后使用customer_vector.push_back(cust_i) 填充向量。

看起来很笨拙,并且鉴于我不太了解 C++ 中的动态内存分配,我将不胜感激以更好的方式解决此问题的任何建议。

谢谢。

【问题讨论】:

你考虑过vector<Customer>而不是vector<Customer*>吗? 指针使用的原因是什么?为什么不简单地std::vector<Customer> customer_vector; 然后customer_vector.push_back(Customer());?根本没有使用指针。 感谢您的反馈。连同下面公认的答案,这有助于我更好地理解向量数据结构。 【参考方案1】:

您实际上不需要存储指向 Customer 的指针 由于矢量已经是一个动态容器,您可以这样做

std::vector<Customer> customer_vec;

// read file
// ...
// example assuming Customer has a constructor taking 2 strings
customer_vec.emplace_back( "foo", "bar" );

【讨论】:

以上是关于在运行时将指针推送到向量 C++的主要内容,如果未能解决你的问题,请参考以下文章

将 char* 推送到向量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到向量中 [已解决]

在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]

选中复选框时将对象推送到数组中,并在 ReactJS 中未选中复选框时删除对象

我想在新用户注册时将通知推送到 mongoDB 的通知集合中

在向量 C++ 中处理指针

推送到成员向量时的段错误