【问题标题】:Storing structs inside a vector with insert function c++使用插入函数c ++将结构存储在向量中
【发布时间】:2013-09-17 11:51:14
【问题描述】:

我目前正在尝试编写一个程序,该程序应该将来自 cin 的传入数据存储到具有结构类型元素的向量中。

struct data{

  int times;
  string name;
};

并将它们存储在向量中

vector<data> data_list;

我遇到的问题是使用插入函数将它们存储在向量中的语法。

我试过data_list.insert(data_list.begin(),5);

用于在第一个索引处存储 int 值 5 但它不起作用。有什么建议吗?

【问题讨论】:

  • 您为什么期望这会起作用? 5 不是 data。目前还不清楚你的目标是什么。

标签: c++ c++11 vector struct insert


【解决方案1】:

由于您的向量包含data 元素,因此您需要将data 对象传递给insert() 函数,例如:

data d = {5, "string_value"};
data_list.insert( data_list.begin(), d );

【讨论】:

    【解决方案2】:

    通过声明

    vector<data> data_list;
    //     ^^^^
    

    您明确表示data_list 将存储data 对象。

    您正在尝试将int 存储在包含data 对象的std::vector 中。您需要将数据对象传递给insert 函数:

    data obj = {5, "name"};             // Declare the data object
                                        // data.times = 5
                                        // data.name  = "name"
    data_list.insert( data_list.begin(), obj ); // Insert it
    //                                   ^^^
    

    【讨论】:

    • @user2787397 你是在头文件 (.h) 中声明你的 struct 吗?这个头文件是否包含在您拥有此代码的源文件中?
    • 定义为struct data{...};在 main 函数之前的源文件中。
    • @user2787397 看看this example,这很好:)
    【解决方案3】:

    规范/正确的方法是定义std::istream&amp; operator &gt;&gt;(std::istream&amp; in, data&amp; d),然后使用输入迭代器初始化或分配您的向量。这意味着,不要使用插入,对整个序列使用 vector::assign,使用输入迭代器(或 vector::push_back)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2021-08-09
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多