0

假设我有两种类型,Class1并且Class2. 然后我创建两个向量:

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_typefor与 forvector<Class2>相同不是很糟糕vector<Class1>吗?

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

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

4

3 回答 3

2

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

于 2012-12-05T19:36:06.840 回答
2

std::allocator定义size_type为,因此size_t您可以假设您可以保证没有自定义分配器为其 s 定义不同size_typesize_t 类型size_type

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

于 2012-12-05T19:53:11.803 回答
1

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

std::common_type<std::vector<classA>::size_type, 
                 std::vector<classB>::size_type>::type i;

for (i=0; i!=vec1.size(); i++)
    // ...

不过,我怀疑您是否会在大多数代码中定期看到这一点(也很可能是编写它的圣诞晚会的祝酒词)。

于 2012-12-05T19:29:49.007 回答