C ++ Vector push / pop

时间:2013-11-12 16:44:07

标签: c++ vector

我一直在寻找解决方案。不使用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 ++,但是矢量正在杀死我。谢谢。

4 个答案:

答案 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,因此您无需预留空间