использование vector с библиотекой boost

218
26 января 2018, 23:29

Ребят пытаюсь подключить библиотеку boost и использовать вместе с вектором. Выглядит примерно так:

#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
namespace mp = boost::multiprecision;
void Pollard(mp::cpp_int a, mp::cpp_int b, mp::cpp_int p)
{
    vector<mp::cpp_int> z(p+1),u(p+1),v(p+1);
    z[0] = 1;
    mp::cpp_int ph=phi(p);
    mp::cpp_int ak=0,ev=0,eu=0,nod,chk;
    mp::cpp_int p1 = p - 1;
    mp::cpp_int x = 0;
    for (mp::cpp_int i=0; i < p; i++)
    {
        if (z[i] % 3 == 1)
        {
            z[i + 1] = b * z[i]%p;
            u[i + 1] = u[i] % ph;
            v[i + 1] = (v[i] + 1) % ph;
        }
        if (z[i] % 3 == 2)
        {
            z[i + 1] = z[i] * z[i]%p;
            u[i + 1] = 2*u[i] % ph;
            v[i + 1] = 2*v[i] % ph;
        }
        if (z[i] % 3 == 0)
        {
            z[i + 1] = a * z[i]%p;
            u[i + 1] = (u[i]+1) % ph;
            v[i + 1] = v[i] % ph;
        }
        if (*find(z.begin(), z.begin() + i, z[i + 1])!= *(z.begin() + i))
        {
            ak = distance(z.begin(),find(z.begin(), z.begin() + i, z[i + 1]));
            ev = v[ak] - v[i+1];
            if (ev < 0)
                ev += p1;
            eu = u[i+1] - u[ak];
            if (eu < 0)
                eu += p1;
void main()
{
}

Когда считаю ue, ev выдает ошибку у v[ak] и u[ak]:

отсутствует оператор "[]", соответствующий этим операндам

Answer 1

Что-то не видно, что такое ваше i, какой тип имеет.

Ну, а ak - это же переменная типа mp::cpp_int, она же в size_t неявно не приводится. А поскольку оператор [] от mp::cpp_int в векторе отсутствует, вот компилятор и ругается.

READ ALSO
Перегрузить операцию ввода для типа vector

Перегрузить операцию ввода для типа vector

Подскажите как правильно нужно перегрузить операцию ввода для записи в файл

213
Обнулить указатель класса обертки

Обнулить указатель класса обертки

Как обнулить в классе обертке указательКроме примера показанного в коде ниже

250
Удаление из std::list

Удаление из std::list

Нужно удалить элемент из std::listпо итераторуСтандарт С++11 и выше не используется

235
подключение #include &lt;pwd.h&gt; #include &lt;grp.h&gt; ошибка)))

подключение #include <pwd.h> #include <grp.h> ошибка)))

почему при компиляции выдает ошибку где я подключаю

248