Как инициализировать вектор NTL за один раз?

В C мы можем инициализировать таблицу с помощью:

int array[3]={1,2,3};

Как мы можем сделать такую ​​вещь с векторами NTL?

Я предполагаю, что объявил вектор и уже установил его длину.

Например:

vec_ZZ vector;

vector.SetLength(3);

Спасибо за вашу помощь.

2 ответа

Смотрите руководство здесь http://www.shoup.net/ntl/doc/vector.txt

Я не думаю, что вы можете инициализировать так, как вы хотите, потому что, когда вы объявляете

Vec<T> v;

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

Vec<T> v; является объектом, и вы можете назначить только объект. Может быть, вы наследуете класс Vec и перегружаете = оператор, так что вы можете назначить массив для него.

Как я упоминал в моем предыдущем ответе, вы можете наследовать класс Vec, как показано ниже.

using namespace NTL;

class MyVec : public  Vec<int>
{
public:
        MyVec(std::initializer_list<int> input);
};

MyVec::MyVec(std::initializer_list<int> input)
{
        int n = input.size();
        this->SetLength(n);
        std::vector<int> v;
        v.insert(v.end(), input.begin(), input.end());

        for(int i=0; i<n; i++)
                this->put(i, v[i]);
}

int main()
{
        MyVec v = {1,2,3};

        for(int i=0; i<v.length(); i++)
                cout << v[i] << " ";

        return 0;
}

Не забудьте использовать флаг C++11 при компиляции.

Я использую Ubuntu ENV, и я использую следующее

g++ -std=c++11 test.cpp -l ntl
Другие вопросы по тегам