在c ++中初始化具有不同列大小的二维数组

时间:2014-07-12 00:48:26

标签: c++ arrays

有没有办法在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"}
    };

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

我会感激任何帮助。

3 个答案:

答案 0 :(得分:2)

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"}
};

答案 1 :(得分: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;
   }
}

答案 2 :(得分:1)

你做不到

string group[7][];

相反,你只能做

 string group[][7];

用于多维C风格数组。

如果你真的需要在最后一个维度中具有不同大小的多维数组,你可以使用std :: vector&gt;与STL。