【问题标题】:c++ vector of vector with differents types具有不同类型的向量的c ++向量
【发布时间】:2015-04-03 14:01:03
【问题描述】:

如何声明和 push_back 具有不同类型变量的向量的二维向量。向量是好方法吗(使用数组更好)?

我的变量是这样的:

int id;
string name;
int start;
int end;

我想获得一份清单: ((id1 name1 start1 end1), (id2 name2 start2 end2) ...

很抱歉这个基本问题,但我曾经使用 python,它允许这样做。 谢谢

【问题讨论】:

  • 最简单的,你可能想要一个struct的向量。
  • 你用的是c++ 11吗?
  • 为了使用不同类型的变量。使用我认为的 void* 指针
  • @TalhaIrfan 你是认真的吗???

标签: c++ vector


【解决方案1】:

您不想要一个二维数组,您想要一个记录数组。像这样的:

struct Record
{
  int id;
  std::string name;
  int start;
  int end;
};

std::vector<Record> records;

【讨论】:

  • @user3608663 这个答案会保存你所有的ID。您可能正处于研究 struct 是一个好主意的阶段。
  • 但是如果我输入:records.id = 1 并且在 records.id=2 之后,那将用 2 替换 1,不是吗?
  • @user3608663 如果您想学习 C++,请通过good book 正确地学习。你不做records.id,你做records[42].id = 1;
【解决方案2】:

您也可以使用std::tuple (C++11) 将元组推入向量中

#include <iostream>
#include <tuple>
#include <string>
#include <vector>

int main()
{
    using record = std::tuple<int, std::string, int, int>;
    std::vector<record> v;
    v.emplace_back(1, "test1", 2, 3);
    v.emplace_back(10, "test2", 20, 30);

    for(auto&& elem: v) // display the elements
    {
        std::cout << std::get<0>(elem) << " ";
        std::cout << std::get<1>(elem) << " ";
        std::cout << std::get<2>(elem) << " ";
        std::cout << std::get<3>(elem) << std::endl;
    }
}

【讨论】:

  • 你也可以使用emplace_back,去掉临时的。
  • 没有python,但我认为它是最接近的
  • 请将 auto&& 替换为 const auto&
  • @DieterLücking auto&amp;&amp; 有什么问题?我知道它唯一严重的用例是stackoverflow.com/a/13130795/3093378,但你为什么不喜欢这里呢?因为非强制的 const-ness?
  • @vsoftco 请忽略我的评论,我想我学到了一些东西
猜你喜欢
  • 2018-05-05
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2017-03-26
  • 2016-03-01
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多