如何将初始化的结构放在结构中?

时间:2011-02-07 05:57:52

标签: c++ c data-structures vector initialization

我有一个结构:

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的这些初始化实例放到一个向量中,然后循环遍历向量...我该怎么做?

3 个答案:

答案 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()模拟,那么迭代很简单。