用于迭代不同类型的向量的索引类型

Type of index to iterate of vectors of different types

本文关键字:向量 类型 索引 同类型 迭代 用于      更新时间:2023-10-16

给定两个不同类型的向量但长度相同,应该以什么类型的索引来同步迭代两者?

请考虑以下代码:

#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::vector<std::string> words = {"foo", "bar"};
std::vector<double> values = {42, 314};
std::vector<std::string>::size_type i = 0;
std::vector<double>::size_type j = 0;
while (i < words.size() && j < values.size()) {
std::string w = words[i];
double v = values[j];
// do something with w and v
++i;
++j;
}
return 0;
}

如果我想使用单个索引(例如i(来迭代wordsvalues,它的类型应该是什么?应该size_t吗?

类型可能相同,也可能不同,它取决于实现。一般来说,std::vector::size_type几乎总是std::size_t,但这不是标准所要求的。在任何情况下,请考虑使用迭代器:

#include <string>
#include <vector>
int main() // no need for (void) in C++
{
std::vector<std::string> words = {"foo", "bar"};
std::vector values = {42.0, 314.0}; // No need for <double> with C++17
auto wit = words.cbegin(), wend = words.cend();
auto vit = values.cbegin(), vend = values.cend();
while (wit != wend && vit != vend) {
std::string w = *wit++;
double v = *vit++;
// do something with w and v
}
}

迭代器使以后在需要时更容易使用算法。

std::vector的成员类型别名size_type独立于模板参数,并且通常是std::size_t的(并且不能/没有意义更大(,所以是的。

但是还有其他方法可以迭代多个范围。