Как инициализировать станд.:: вектор от массива C-стиля?

С небольшой модификацией вашего класса:

class ABC:
    def __init__(self,debugFlag=False):
        self.debugFlag = debugFlag    # initialize the flag here or use default
    def some_function()
        if self.debugFlag is True:
            print "Some debug logs"

После создания объекта вы сможете изменить его атрибуты, например:

obj_abc = ABC()        # debug off by default
obj_abc.some_function()    # no debug print

obj_abc.debugFlag = True   # enable debug
obj_abc.some_function()    # now with debug print

obj_abc.debugFlag = False  # disable debug
obj_abc.some_function()    # now without debug print
155
задан MD XF 9 March 2017 в 18:57
поделиться

4 ответа

Не забывайте, что указатели можно рассматривать как итераторы:

w_.assign(w, w + len);
213
ответ дан 23 November 2019 в 21:56
поделиться

Быстрое решение могло быть:

std::vector<double> w_(w,w+len); 
<час>

или универсальный ответ:

std::vector<double> vec(carray,carray+carray_size); 
<час>

на основе выше : не забывают, что можно рассматривать указатели как итераторы

0
ответ дан 23 November 2019 в 21:56
поделиться

std :: vector :: assign - это правильный путь, потому что это небольшой код . Но как это работает на самом деле? Разве не меняет размер, а потом копирует? В MS реализации STL я использую именно так.

Боюсь, что не существует более быстрого способа для реализации (пере) инициализации вашего std :: vector .

0
ответ дан 23 November 2019 в 21:56
поделиться

Вы используете слово инициализировать, поэтому неясно, является ли это однократным назначением или может произойти несколько раз.

Если вам нужна только однократная инициализация, вы можете поместить ее в конструктор и использовать конструктор вектора с двумя итераторами:

Foo::Foo(double* w, int len) : w_(w, w + len) { }

В противном случае используйте assign, как было предложено ранее:

void set_data(double* w, int len)
{
    w_.assign(w, w + len);
}
37
ответ дан 23 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: