【问题标题】:vector and dimension vecotr with itself has a specific data type向量 n 维向量,其自身具有特定的数据类型
【发布时间】:2012-08-01 08:20:13
【问题描述】:

我需要用 boolean、std:string 和 int 向量化,我用谷歌搜索了多维向量,定义为:

std::vector< std::vector< std::vector <std::vector<int> > > a;

但它对我来说有问题,它只有一种数据类型,我找到了对:

std::vector<std::pair<bool,float> >  a;

但是 std::pair 有问题,不能定义更多的二维。

问题: 如何定义每个维度都有特定数据类型的多维向量? 注意:我需要 3 个维度。

【问题讨论】:

    标签: c++ arrays vector multidimensional-array


    【解决方案1】:
    template<typename First, typename Second, typename Third>
    struct triplet
    {
       triplet()
       {
       }
       triplet(const First& f, const Second& s, const Third& t):
          first(f), second(s), third(t)
       {
       }
       First first;
       Second second;
       Third third;
    };
    
    template<typename First, typename Second, typename Third>
    triplet make_triplet(const First& f, const Second& s, const Third& t)
    {
       return triplet(f, s, t);
    }
    

    当然,如果你支持 C++11 - 使用 std::tuple&lt;Args...&gt;, boost::tuple 如果可以使用 boost 并且不支持 C++11。

    【讨论】:

      【解决方案2】:

      怎么样:

      struct mytype {
          bool a;
          std::string str;
          int num;
      };
      
      std::vector<mytype>
      

      ?

      【讨论】:

      • 错了,因为str有动态len,结构需要静态len,我已经体验过了。你从内存中获取额外数据或重叠数据。如果我只有int和bool,你说正确。
      • 嗯,我不确定它是否属实。 std::string 不只是一个指针吗?
      • 你能发布任何文件来源吗?因为我不能。
      【解决方案3】:

      一个包含值和向量的std::pair 怎么样?即

      std::vector<std::pair<bool, std::vector<std::pair<std::string, str::vector<int>>>>>
      

      【讨论】:

      • 我认为可以防止 push_back 出现问题,但我对其进行了测试,这是个好建议。
      • 我放了空格以避免错误:std::vector&lt;std::pair &lt;bool, std::vector &lt;std::pair &lt;std::string, std::vector &lt;int&gt; &gt; &gt; &gt; &gt; packetStateStack; 但我今天会测试。
      【解决方案4】:

      如果std::pair 的唯一问题是缺少二维以上,您可以使用std::tuple (c++ 11) 或boost::tuple 的向量。或者只是创建自己的结构

      【讨论】:

        【解决方案5】:

        你可以使用 std::tuple

        std::vector<std::tuple<bool, std::string, int>>
        

        但这不是一个多维向量。它是元组的线性向量。

        【讨论】:

        • 这是C++11,请注意。
        • @Kiril:或者你使用 Boost 的 tuple 类。
        • @Xeo - 正确,但我也要提一下(这里是std::tuple
        • @seg_fault cmets 解释了原因。阅读它们。
        • @yuri Kilochek:没关系,我使用 -std=c++11 并定义:std::tuple &lt;bool, std::string, int&gt; packetStateStack;
        猜你喜欢
        • 2022-12-17
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 2019-11-11
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        相关资源
        最近更新 更多