C++ 如何在一个for循环中迭代两个向量?

C++ 如何在一个for循环中迭代两个向量?,c++,vector,C++,Vector,我之所以显示我的函数,是因为我认为问题出在我的for循环中 DataStoreVectors::DataStoreVectors() { } void DataStoreVectors::addItem(string item1, int item2) { videoGame.push_back(item1); gameSize.push_back(item2); } void DataStoreVectors::listItems() { vector <st

我之所以显示我的函数,是因为我认为问题出在我的
for
循环中

DataStoreVectors::DataStoreVectors() {
}

void DataStoreVectors::addItem(string item1, int item2) {
    videoGame.push_back(item1);
    gameSize.push_back(item2);
}

void DataStoreVectors::listItems()
{
    vector <string>::iterator pv;
    vector <int>::iterator px;
    for (pv = videoGame.begin(); pv < videoGame.end(); pv++)
    {
        for (px = gameSize.begin(); px < gameSize.end(); px++)
            cout << *pv << " " << *px << endl;
    }
}

这可能吗?制作一个结构会更好吗?我正在试图找出并排打印两个向量的正确方法。

保持迭代器同步非常简单。只需在for循环中添加另一个增量,如下所示:

vector <int>::iterator px = gameSize.begin(); // << Add this
for (pv = videoGame.begin(); pv < videoGame.end(); pv++, px++)
                                                    // ^^^^^^ Add this

vector::iterator px=gameSize.begin();// 如果数据是链接的,那么您应该在此基础上创建一个
struct
。 我还建议在
addItem
中为参数指定一个更具描述性的名称,例如
addItem(string gameName,int gameSize)
,并可能重命名向量以使用复数形式,例如
videoGames
gameSize

关于对两个向量的迭代,您可以使用简单的int索引对其进行迭代(假设两个向量的大小与您的情况相同):

for(int i=0;icout您可以在同一个循环中增加每个迭代器,但是两个数组的大小必须相同,但是这是一种非常容易出现错误的方法,包含两个字段的结构的单个数组是一种更好的方法。

您可以使用range-v3

for(自动[游戏,大小]:范围::视图::zip(视频游戏,游戏大小))
{

STD::太棒了!我试着为我的第二个向量添加另一个增量,但是它不起作用,因为我没有正确地写我的迭代器。非常感谢!“MuZuna495高兴地帮助:”虽然这不是一般的坏建议,但是你可以考虑避免在一个巨大的现有代码库中做这样的重构。因为它很容易。用副作用破坏某些东西,或者是因为它会导致开发(重构)工作的意外增加。不是每个人都从新修剪的草坪开始。
vector <int>::iterator px = gameSize.begin(); // << Add this
for (pv = videoGame.begin(); pv < videoGame.end(); pv++, px++)
                                                    // ^^^^^^ Add this
for (int i = 0; i < videoGame.size(); ++i)
{
    cout << videoGame[i] << " " << gameSize[i] << endl;
}
for (auto [game, size] : ranges::views::zip(videoGame, gameSize))
{
    std::cout << game << " " << size << std::endl;
}