获取保证通过不同类型的向量进行索引的size_type

Getting a size_type that is guaranteed to work for indexing through vectors of different types

本文关键字:索引 size type 向量 获取 同类型      更新时间:2023-10-16

假设我有两种类型,Class1Class2。然后我创建两个向量:

vector<Class1> vec1;
vector<Class2> vec2;
//create vec1 and vec2, such that both have the same number of elements
for (vector<Class1>::size_type i=0; i!=vec1.size(); ++i) {
  c1 = vec1[i];
  c2 = vec2[i]; //BAD?
  //do something
}

你可能明白了。在这种情况下,依靠size_type vector<Class2>vector<Class1>相同的不是不好吗?

在这些情况下,您有两个相同大小的向量包含不同类型的对象,但它们的相关性足以保证遍历它们,如何解决此问题?

我知道我不太可能达到足够高的整数来遇到问题,但我仍然想写出好的、健壮的、C++的代码。也许我应该看看两个size_type并采取最少的?这是要走的路吗?对我来说听起来像是一种奇怪的做法。

std::allocatorsize_type定义为size_t,因此您可以假设size_type size_t i,如果您可以保证没有自定义分配器为其size_type定义不同的类型。

但是,您冒着有人稍后回来并添加可能与此假设不兼容的自定义分配器的风险。

我不确定标准是否保证了这一点,但无论您选择什么模板参数,我希望所有vector::size_type类型都是相同的。

我认为,至少在理论上,你想要的是这样的:

std::common_type<std::vector<classA>::size_type, 
                 std::vector<classB>::size_type>::type i;
for (i=0; i!=vec1.size(); i++)
    // ...

我怀疑你会在大多数代码中定期看到这一点(也很可能也不是圣诞派对上写它的祝酒词)。