C++ C++;向量迭代器
我需要一些帮助来理解向量C++ C++;向量迭代器,c++,vector,C++,Vector,我需要一些帮助来理解向量rvN 这是我的理解: rvN是包含数字字符0001的向量。 在函数Clear()中,所有前导零都将从向量中删除。迭代器设置为指向最后一个向量元素(1)的末尾 如何消除所有的零 for (int i = Number.size() - 1; i >= 0; i--) { if (Number[i]<'0' || Number[i]>'9') break; else r
rvN
这是我的理解:
rvN是包含数字字符0001的向量。
在函数Clear()
中,所有前导零都将从向量中删除。迭代器设置为指向最后一个向量元素(1)的末尾
如何消除所有的零
for (int i = Number.size() - 1; i >= 0; i--)
{
if (Number[i]<'0' || Number[i]>'9')
break;
else
rvN.push_back(Number[i] - '0');
}
Clear(rvN);
}
void LargeNumber::Clear(vector<char>& rvN)
{
//Eliminate all leading 0s
vector<char>::iterator it = rvN.end();
while (it != rvN.begin())
{
it--;
if (*it != 0)
break;
}
rvN.erase(it + 1, rvN.end());
}
for(int i=Number.size()-1;i>=0;i--)
{
if(编号[i]'9')
打破
其他的
rvN.推回(编号[i]-“0”);
}
清除(rvN);
}
void LargeNumber::Clear(向量和rvN)
{
//消除所有前导0
向量::迭代器it=rvN.end();
while(it!=rvN.begin())
{
它--;
如果(*it!=0)
打破
}
rvN.erase(it+1,rvN.end());
}
从右到左读取数字:
for (int i = Number.size() - 1; i >= 0; i--)
如果“数字”包含“1234”,则读取的第一个数字的有效性最低,即“4”。然后按读取顺序将其推送到“rvN”上。因此,rvN将成为
{ 4, 3, 2, 1 }
或者如果数字包含00005
{ 5, 0, 0, 0, 0 }
So Clear只是从右向左工作,直到找到一个非零,然后修剪数组的背面,以便在正常表示(050->50005->5500->500->500)中只保留最右边的数字。向量看起来是反向的,因此最低有效值存储在“开始”端。例如,1234存储为{4,3,2,1}。大概,“反向向量数”你看到这段代码了吗?代码前面的代码块是什么,其中代码=3?数字是1000。因此,如果颠倒,它将是0001。如果它是从右向左工作的,那么如何删除1之前的零?因为它先到达1,然后跳出while循环。我有点困惑。@Justin他们没有。这就是重点。如果数字为
“1000”
,则零是有效的。如果数字为“0001”
则反转为1000
,则循环将迭代四次,保持最后一次测试,从而返回1
。唯一能让0001
成为rvN
的方法是,如果原始数据是“1000”
。请稍微编辑我答案的最后一行。
{ 5, 0, 0, 0, 0 }