C ++ вектор как параметр Справка - PullRequest
0 голосов
/ 23 июня 2010

Я написал функцию, которая принимает вектор, позицию int и значение int

void add(vector<int>& pro, int pos, int val){
    pro[pos] += val;
    while(pro[pos] > 9){
        int carry = pro[pos]/10;
        pro[pos] %= 10;
        pos++;
        pro[pos] += carry;
    }//while
}//function add

Допустим, у меня есть

vector<int> list1,list2,product;
list1.push_back(4);
list1.push_back(9);
list1.push_back(9);
list2.push_back(3);
list2.push_back(4);

vector<int>::reverse_iterator i,j;
        int k,l;
        for(j = list2.rbegin(), k = 0; j != list2.rend(); j++,k++){
            for(i = list1.rbegin(), l = 0; i != list1.rend(); i++,l++){
                              add(product, k+l, (*j * *i) );
                        }//for i
                }//for j

, но после выдачи мне выдается ошибкавыполнить его, сказав, что «векторный индекс вне диапазона»

Я не уверен, откуда это исходит, я что-то не так делаю в своей функции добавления?Любая помощь приветствуется.Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Вы не показали вектор product; в нем достаточно элементов? Если нет, то использование pro[pos] в функции определенно не сработает.

Было бы лучше не смешивать итераторы и индексы при переборе контейнеров; если вам нужны индексы, вы должны просто использовать индексы; это сделало бы код чище и легче следовать (или, если вы действительно хотите использовать итераторы, вы можете использовать std::distance() для вычисления индексов из итераторов).

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

Возможно, вам не хватает места в редакторе продукта.Вы выделяете его?

Я вижу из вашего кода, что вы пытаетесь реализовать BigInteger.Рассматривали ли вы использование существующей реализации?

Чтобы это работало без предварительного выделения, я бы разделил продукт на два этапа.

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