Объявите массив объектов, используя цикл for c ++ - PullRequest
1 голос
/ 08 марта 2011

Хорошо.Итак, я объявил массив объектов, и я определил их вручную, используя этот код:

Object* objects[] =
{
    new Object(/*constructor parameters*/),
    new Object(/*constructor parameters*/)
}; 

Есть ли какой-либо цикл (предпочтительно цикл for) для их объявления?Что-то вроде:

Object* objects[] =
{
    for(int i=0; i<20; /*number of objects*/ i++)
    {
        new Object(/*constructor parameters*/);
    }
}; 

Но с правильным синтаксисом?

Ответы [ 3 ]

9 голосов
/ 08 марта 2011

Я настоятельно рекомендую использовать стандартный библиотечный контейнер вместо массивов и указателей:

#include <vector>

std::vector<Object> objects;

// ...

void inside_some_function()
{
    objects.reserve(20);
    for (int i = 0; i < 20; ++i)
    {
        objects.push_back(Object( /* constructor parameters */ ));
    }
}

Это обеспечивает безопасность исключений и меньшую нагрузку на кучу.

7 голосов
/ 08 марта 2011
Object* objects[20];

for(int i=0; i<20; /*number of objects*/ i++)
{
    objects[i] = new Object(/*constructor parameters*/);
}
2 голосов
/ 08 марта 2011

Точки в C ++ могут использоваться как массивы.Попробуйте что-то вроде этого:

// Example
#include <iostream>

using namespace std;

class Object
{
public:
    Object(){}
    Object(int t) : w00t(t){}
    void print(){ cout<< w00t << endl; }
private:
    int w00t;
};

int main()
{
    Object * objects = new Object[20];
    for(int i=0;i<20;++i)
        objects[i] = Object(i);

    objects[5].print();
    objects[7].print();

    delete [] objects;
    return 0;
}

С уважением,Деннис М.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...