1

我一直在寻找解决这个问题的方法。不使用 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是一个 uns int 向量,其中 1-1000 已被洗牌。 team1是一个结构体,其中 nums 作为 uns int 向量。

我正在尝试获取ppb中的最后一个数字并将其分配给team1.nums中的第一个数字。然后我需要删除ppb中的那个值,这样我就没有重复了。

我用ppb打印了实际数字,它们很好。当我编译时,我得到大约 40 个数字,例如 2397295,然后是大约 80 个零。

我正在慢慢地获得 C++,但向量正在杀死我。谢谢你。

4

4 回答 4

4

向量的索引为零,但您的“a”从 1 开始。

所以第一个值 fromppb.back()存储在team1.nums[0]但你 print team1.nums[1]。下一个值 fromppb.back()存储在team1.nums[1]但现在您 print team1.nums[2]

于 2013-11-12T16:47:29.783 回答
0

使用容器时最好使用迭代器。它将避免此类索引错误。您还可以访问一些简洁的功能,例如 std::copy ,它将您编写的所有复制代码放在一行中。

std::copy(ppb.rbegin(),ppb.rend(),back_inserter(team1.nums));

back_inserter使用,vector::push_back所以你不必保留空间

于 2013-11-12T17:22:08.813 回答
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();
于 2013-11-12T16:50:59.550 回答
0

尝试循环使用

while(ppb.empty() == false)
{
...// Your code here
}
于 2013-11-12T16:50:32.200 回答