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;i cout您可以在同一个循环中增加每个迭代器,但是两个数组的大小必须相同,但是这是一种非常容易出现错误的方法,包含两个字段的结构的单个数组是一种更好的方法。您可以使用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;
}