我有一个结构:
typedef struct
{
int nNum;
string str;
}KeyPair;
然后我将我的结构初始化为这样的东西:
KeyPair keys[] =
{
{0, "tester"},
{2, "yadah"},
{0, "tester"}
};
然而,让我们说一些其他的初始化:
KeyPair keysA[] =
{
{0, "tester"},
{2, "yadah"},
{0, "tester"}
};
KeyPair keysB[] =
{
{0, "testeras"},
{2, "yadahsdf"},
{3, "testerasss"}
};
KeyPair OtherkeysA[] =
{
{1, "tester"},
{2, "yadah"},
{3, "tester"}
};
和另外20个人一样。
现在,我如何创建另一个结构并初始化它,使其包含这些初始化的KeyPairs?
之所以这样,是因为我将重复调用一个函数,其参数将来自这些结构。而且我不想这样做:
pressKeyPairs( keys, sizeof( keys) / sizeof( keys[0] ) );
pressKeyPairs( keysA, sizeof( keysA) / sizeof( keysA[0] ) );
pressKeyPairs( keysB, sizeof( keysB) / sizeof( keysB[0] ) );
pressKeyPairs( OtherkeysA, sizeof( OtherkeysA) / sizeof( OtherkeysA[0] ) );
and so on...
所以我想循环一个包含KeyPairs的这些inilialized实例的结构......
或者我想把KeyPairs的这些初始化实例放到一个向量中,然后循环遍历向量...我该怎么做?
答案 0 :(得分:1)
假设您有一个固定数量的密钥对,您可以使用结构成员函数:
typedef struct KeyPairs {
KeyPair keysA[3];
KeyPair keysB[3];
KeyPair otherKeysA[3];
void init() {
keysA[0].nNum = 0;
keysA[0].str = "tester";
keysA[1].nNum = 2;
keysA[1].str = "yadah";
keysA[2].nNum = 0;
keysA[2].str = "tester";
// and so on for other keys
}
} KeyPairs;
然后像这样使用它:
KeyPairs pairs;
pairs.init();
答案 1 :(得分:1)
如何使用真正的C ++并使用构造函数?
(请注意,typedef是C ++中结构体的含义)
struct KeyPair
{
int nNum;
string str;
public:
KeyPair() {}
KeyPair(int n, string s) : nNum(n), str(s) {}
};
然后使用另一个结构:
struct TripleKeyPair
{
KeyPair keys[3];
TripleKeyPair()
{
// Your initialisation code goes here
}
};
最后,我不建议使用如下名称:
KeysA,KeysB,KeysC ......
阵列就是这样的。为什么要注意使用std::vector?
答案 2 :(得分:1)
如何在数组中使用“null”对象作为分隔符?你必须使用构造函数:
struct KeyPair
{
KeyPair() : fIsEmpty(true) {}
KeyPair(int nNum_, const char *szStr) : nNum(nNum_), str(szStr), fIsEmpty(false) {}
int nNum;
string str;
bool fIsEmpty;
};
然后你可以像这样初始化它:
KeyPair allKeys[] =
{
KeyPair(0, "testeras"),
KeyPair(2, "yadahsdf"),
KeyPair(3, "testerasss"),
KeyPair(),
KeyPair(0, "tester"),
KeyPair(2, "yadah"),
KeyPair(3, "tester"),
KeyPair(1, "moreyadah"),
KeyPair()
};
如果为KeyPair对象数组实现一种strlen()模拟,那么迭代很简单。