使用列表存储对象

时间:2017-01-25 03:18:10

标签: c++ list

我想知道它是正确的方法还是有任何正确的方法来存储同一个类的不同对象并使用该类的操作?

class Camera_ {

//function1
//function2
//function3

}

int main()
{
    int n ;
    std::cout <<"\n How many Cameras you are using ? \n";
    std ::cin >> n;
    std:: cout << "The number of camera is " << n << std ::endl ;

    std::list<Camera_> list1; // creating a list of camera



    for(int j=0; j<n; j++) //transfer array
    camera = new Camera_;// camera object        
    list1.push_back( camera);// storing camera objects
    list<Camera_>::iterator it;
    for(it = iList.begin(); it != iList.end(); it++)
    *it->function1();
    *it->function2();
    *it->function3();  // I am trying to access 3 function of the class for each objects of camera class. 

    return 0;
}

2 个答案:

答案 0 :(得分:0)

你所展示的是不恰当的。看起来应该更像这样:

class Camera {
public:
    void function1() {
        // ...
    }
    void function2() {
        // ...
    }
    void function3() {
        // ...
    }
};

int main()
{
    int n;
    std::cout << "How many Cameras you are using? ";
    std::cin >> n;
    std::cout << "The number of Cameras is " << n << std ::endl;

    std::list<Camera> list1; // creating a list of camera

    for (int j = 0; j < n; ++j) {
        list1.push_back( Camera() ); // storing camera objects
        // or, if using C++11 or later:
        // list1.emplace_back();
    }
    // or simply:
    // list1.resize(n);

    list<Camera>::iterator it;
    for(it = list1.begin(); it != list1.end(); ++it) {
        it->function1();
        it->function2();
        it->function3();
    }

    return 0;
}

答案 1 :(得分:0)

这里提出了一些可以提高效率和其他内容的建议:

  1. 如果您没有频繁插入特定索引,请使用vector而不是list,您将获得随机访问(这取决于您的用例)。

  2. 使用智能指针 - 您正在存储Camera_类的指针

    camera = new Camera _; //相机对象
    list1.push_back(camera); //存储相机对象

  3. 将其更改为:

    shared_ptr<Camera_> sptr = make_shared(new Camera_);
    list1.push_back(sptr);// storing camera objects
    

    当您摆脱删除内存的负担时,使用智能指针是一种更好的做法。使用原始指针可能会导致内存泄漏,即使在有时进行适当的护理之后(例如在异常期间)。