Вектор производительности STL - PullRequest
4 голосов
/ 17 июня 2010

Класс вектор STL хранит копию объекта, используя конструктор копирования каждый раз, когда я вызываю push_back.Разве это не замедлит программу?Я могу иметь собственный класс связанного списка, который имеет дело с указателями на объекты.Хотя это не будет иметь некоторые преимущества STL, но все же должно быть быстрее.

См. Этот код ниже:

#include <vector>
#include <iostream>  
#include <cstring>

using namespace std;

class myclass
{
    public:
        char* text;

        myclass(const char* val)
        {
           text = new char[10]; 
           strcpy(text, val);
        }

        myclass(const myclass& v)
        {
            cout << "copy\n";
            //copy data
        }
};

int main()
{
    vector<myclass> list;
    myclass m1("first");
    myclass m2("second");

    cout << "adding first...";
    list.push_back(m1);

    cout << "adding second...";
    list.push_back(m2);

    cout << "returning...";
    myclass& ret1 = list.at(0);
    cout << ret1.text << endl;

    return 0;
}

его вывод выглядит как:

adding first...copy
adding second...copy
copy

В выводе показано, что конструктор копирования вызывается оба раза при добавлении и получениизначение даже тогда.Влияет ли это на производительность, особенно если у нас большие объекты?

Ответы [ 11 ]

0 голосов
/ 17 июня 2010

Во-первых, рекомендуется использовать указатели вместо, когда вы используете свой собственный класс в векторе. Однако здесь как данные text хранится как указатель. Его (значение атрибута text) не копируется дважды. Так что в этом приложении нет серьезных проблем с производительностью.

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