有没有办法在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"}
};
它不起作用。 如果一个数组另外是静态和恒定的,那将是很好的,但这并不是必需的。最重要的是使代码有效。
我会感激任何帮助。
答案 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。