我写了一个函数来接受一个向量,一个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
但是在我执行它之后它给了我一个错误 “矢量下标超出范围”
我不确定这是从哪里来的我在添加功能中做错了什么? 任何帮助表示赞赏。感谢。
答案 0 :(得分:2)
您尚未显示product
向量;它有足够数量的元素吗?如果没有,那么在函数中使用pro[pos]
肯定是行不通的。
迭代容器时不要混合使用迭代器和索引会更干净;如果你需要索引,你应该只使用索引;这将使代码更清晰,更容易理解(或者,如果你真的想使用迭代器,你可以使用std::distance()
来计算迭代器的索引。)
答案 1 :(得分:0)
您可能在产品检索器中没有足够的空间。你分配了吗?
我可以从您的代码中看到您正在尝试实现BigInteger。您是否考虑过使用现有的实施方案?
为了在没有预先分配的情况下实现这一点,我将产品分为两个步骤。