【问题标题】:Initialize two dimensional array with different columns sizes in c++ [duplicate]在c ++中初始化具有不同列大小的二维数组[重复]
【发布时间】:2014-09-02 17:12:52
【问题描述】:

有没有办法在 c++ 中初始化具有不同列大小的二维数组? 我尝试制作控制台纸牌游戏。 我前段时间做过类似的事情。

 static string const group[7][];

 string const Cards::group = {
            { "AA", "KK", "AKs" },
            { "QQ", "JJ", "AK", "AJs", "KQs", "AQs" },
            { "TT", "AQ", "ATs", "KJs", "QJs", "JTs" },
            { "99", "88", "AJ", "AT", "KQ", "KTs", "QTs", "J9s" , "T9s" , "98s" },
            { "77", "66", "A9s", "A5s", "A4s", "A3s", "A2s", "K9s", "KJ", "KT", "QJ", "QT", "Q9s", "JT", "QJ", "T8s", "97s", "87s", "76s", "65s"},
            { "55", "44", "33", "22", "K9", "J9", "86s"},
            { "T9", "98", "85s"}
    };

它不起作用。 如果一个数组另外是静态的和恒定的,那就太好了,但这不是必需的。最重要的是让代码有效。

如果能提供任何帮助,我将不胜感激。

【问题讨论】:

  • s0mehow,你的声明和定义不匹配......

标签: c++ arrays


【解决方案1】:

C++ 中的数组并不是真正动态的;它们不能扩展或缩小。此外,静态数组的维度必须在声明时就知道。可以通过将group 声明为string** 并稍后使用适当大小的内存对其进行初始化来使用动态分配的数组。您还可以使用基本等效但首选的二维向量,因为它更干净,因为我们可以利用它的内存管理:

static std::vector<std::vector<std::string>> const group;

std::vector<std::vector<std::string>> Cards::group = {
    { "AA", "KK", "AKs" },
    { "QQ", "JJ", "AK", "AJs", "KQs", "AQs" },
    { "TT", "AQ", "ATs", "KJs", "QJs", "JTs" },
    { "99", "88", "AJ", "AT", "KQ", "KTs", "QTs", "J9s" , "T9s" , "98s" },
    { "77", "66", "A9s", "A5s", "A4s", "A3s", "A2s", "K9s", "KJ", "KT", "QJ", "QT", "Q9s", "JT", "QJ", "T8s", "97s", "87s", "76s", "65s"},
    { "55", "44", "33", "22", "K9", "J9", "86s"},
    { "T9", "98", "85s"}
};

【讨论】:

  • 您需要 C++11 才能以这种方式初始化向量(使用大括号中的值列表),不是吗?因此,这取决于您拥有的编译器。我们中的一些人此时仍在使用 VC++2010。
【解决方案2】:

你不能使用:

string group[7][] = 

但是,您可以使用:

std::vector<std::string> group[] = 

这是一个工作程序。

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

std::vector<std::string> group[] = 
{
   { "AA", "KK", "AKs" },
   { "QQ", "JJ", "AK", "AJs", "KQs", "AQs" },
   { "TT", "AQ", "ATs", "KJs", "QJs", "JTs" },
   { "99", "88", "AJ", "AT", "KQ", "KTs", "QTs", "J9s" , "T9s" , "98s" },
   { "77", "66", "A9s", "A5s", "A4s", "A3s", "A2s", "K9s", "KJ", "KT", "QJ", "QT", "Q9s", "JT", "QJ", "T8s", "97s", "87s", "76s", "65s"},
   { "55", "44", "33", "22", "K9", "J9", "86s"},
   { "T9", "98", "85s"}
};

int main()
{
   for ( auto it1 : group )
   {
      for ( auto it2 : it1 )
      {
         std::cout << it2 << " ";
      }
      std::cout << std::endl;
   }
}

【讨论】:

    【解决方案3】:

    你做不到

    string group[7][];
    

    相反,你只能这样做

     string group[][7];
    

    用于多维 C 样式数组。

    如果你真的需要最后一维不同大小的多维数组,你可以使用std::vector>和STL。

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2019-02-10
      • 2014-10-31
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多