我一直在寻找解决方案。不使用c ++ 11。
for(int a = 1; a < team1.chan; a++)
{
team1.nums.push_back(ppb.back());
ppb.pop_back();
cout << team1.nums[a] << " " << endl;
}
ppb 是一个非整数向量,1-1000已被洗牌。 team1 是一个结构,其中nums为非int向量。
我正在尝试使用 ppb 中的最后一个数字,并将其分配给 team1.nums 中的第一个数字。 然后我需要在 ppb 中删除该值,因此我没有重复项。
我用ppb打印了实际数字,它们很好。当我编译时,我得到大约40个数字,如2397295,然后大约80个零。
我正在慢慢得到C ++,但是矢量正在杀死我。谢谢。
答案 0 :(得分:4)
向量是零索引但你的'a'从1开始。
因此ppb.back()
的第一个值存储在team1.nums[0]
,但您打印team1.nums[1]
。
ppb.back()
的下一个值存储在team1.nums[1]
,但现在您打印team1.nums[2]
。
答案 1 :(得分:0)
尝试使用
循环while(ppb.empty() == false)
{
...// Your code here
}
答案 2 :(得分:0)
我认为你所需要的只是
team1.nums.assign( std::make_move_iterator( team1.rbegin() ), std::make_move_iterator( team1.rend() ) );
team1.clear();
或者如果不支持移动构造函数,那么
team1.nums.assign( team1.rbegin(), team1.rend() );
team1.clear();
答案 3 :(得分:0)
使用容器时最好使用迭代器。它将避免这种索引错误。您还可以访问一些简洁的函数,例如std :: copy,它将您编写的所有复制代码放在一行中。
std::copy(ppb.rbegin(),ppb.rend(),back_inserter(team1.nums));
back_inserter
使用vector::push_back
,因此您无需预留空间