使用声明值初始化2D向量

时间:2012-10-20 21:37:46

标签: c++ vector initialization

我正在研究一个随机生成物品的程序(例如武器,盔甲等),我想制作全局常量向量,其中包含可以赋予物品的所有名称。我想在我的所有其他类(但不可修改)的头文件中使用这个2D向量,所以我需要在声明时初始化它。

我之前使用过以下内容:

static const std::string v[] =
{
    "1.0", "1.1", "1.2", "null"
};
const std::vector<std::string> versions( v, v+sizeof( v)/sizeof( v[0]));

这适用于一维矢量,但是我想使用2D矢量来存储项目名称。

我尝试过使用以下内容,但这意味着我没有成员函数(例如size()):

static const std::string g_wn_a[] = { "Spear", "Lance", "Jouster" };
static const std::string g_wn_b[] = { "Sword", "Broadsword", "Sabre", "Katana" };
const std::string* g_weapon_names[] = { g_wn_a, g_wn_b };

我也不想使用类来存储所有名称,因为我觉得创建变量以便每次我想使用它们时存储所有名称都是低效的。

有谁知道如何解决我的问题?

2 个答案:

答案 0 :(得分:1)

您可以使用包含const static成员的班级。这样,您的类只会像命名空间一样运行,您不必创建名称保持类的实例来使用名称。

struct MyNames {
    // const static things
    const static string myweapon = "Katana"
};

string s = MyNames::myweapon; // s = "Katana"

答案 1 :(得分:0)

这是C ++,所以最常见的方法是编写一个在其构造函数中执行此操作的类,然后创建该类的const对象。然后,您的类将提供各种成员函数来查询它维护的各种项目。

作为奖励,这将使您的其余代码更容易使用各种项目。