c ++ vector作为参数帮助

时间:2010-06-23 03:27:05

标签: c++ stl vector

我写了一个函数来接受一个向量,一个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 个答案:

答案 0 :(得分:2)

您尚未显示product向量;它有足够数量的元素吗?如果没有,那么在函数中使用pro[pos]肯定是行不通的。

迭代容器时不要混合使用迭代器和索引会更干净;如果你需要索引,你应该只使用索引;这将使代码更清晰,更容易理解(或者,如果你真的想使用迭代器,你可以使用std::distance()来计算迭代器的索引。)

答案 1 :(得分:0)

您可能在产品检索器中没有足够的空间。你分配了吗?

我可以从您的代码中看到您正在尝试实现BigInteger。您是否考虑过使用现有的实施方案?

为了在没有预先分配的情况下实现这一点,我将产品分为两个步骤。

  1. 没有进位计算的一个。这样你可以使用push_back
  2. 计算所有进位并获得最终结果