多维数组(C ++)

时间:2009-04-12 02:26:11

标签: c++ pointers multidimensional-array memory-management

我正在尝试将指针存储在数组中。

我指向指针的指针是类对象:

classType **ClassObject;

所以我知道我可以使用像这样的新运算符来分配它:

ClassObject = new *classType[ 100 ] = {};

我正在阅读带有标点符号的文本文件,这是我到目前为止的内容:

// included libraries
// main function
// defined varaibles

classType **ClassObject; // global object
const int NELEMENTS = 100; // global index


wrdCount = 1;  // start this at 1 for the 1st word
while ( !inFile.eof() )  
{
   getline( inFile, str, '\n' );  // read all data into a string varaible
   str = removePunct(str);  // User Defined Function to remove all punctuation.
   for ( unsigned x = 0; x < str.length(); x++ )
   {
       if ( str[x] == ' ' ) 
       {
          wrdCount++;  // Incrementing at each space
          ClassObject[x] = new *classType[x];
       // What i want to do here is allocate space for each word read from the file.

       }
   }
}
// this function just replaces all punctionation with a space
string removePunct(string &str) 
{ 
    for ( unsigned x = 0; x < str.length(); x++ )
        if ( ispunct( str[x] ) )
            str[x] = ' ';
  return str;
}

// Thats about it.

我想我的问题是:

  • 我是否为文件中的每个单词分配了空间?
  • 如何在while / for循环中将指针存储在ClassObject数组中?

3 个答案:

答案 0 :(得分:3)

如果您使用的是C ++,请使用Boost Multidimensional Array Library

答案 1 :(得分:1)

嗯,我不确定你想做什么(尤其是新的* classType [x] - 这甚至可以编译吗?)

如果你想为每个单词添加一个新的classType,那么你可以去

ClassObject[x] = new classType; //create a _single_ classType
ClassObject[x]->doSomething();

如果ClassObject已初始化(正如您所说)。

你说你想要一个2D数组 - 如果你想这样做,那么语法是:

ClassObject[x] = new classType[y]; //create an array of classType of size y
ClassObject[0][0].doSomething(); //note that [] dereferences automatically

但是,我也不确定你的新* classType [100] = {}是什么意思; - 那里的花括号是什么?好像应该是

classType** classObject = new classType*[100];

我强烈建议你使用别的东西,因为这真的很讨厌(你必须要处理删除...呃)

使用vector&lt;&gt;或者如上面提到的海报,升级库。

答案 2 :(得分:0)

除了一行外,您的代码完全没问题: ClassObject[x] = new *classType[x]; 明星*需要消失,你可能想说的是你希望ClassObject被索引到字数而不是x。

将该行替换为: ClassObject[wrdCount] = new classType[x];

希望有所帮助, Billy3