繁体   English   中英

获取可以保证通过不同类型的向量建立索引的size_type

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

假设我有两种类型, 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
}

您可能会得到图片。 在这种情况下,依靠vector<Class2>size_typevector<Class1>size_type相同是否不好?

在这些情况下,如果您有两个大小相同的矢量,其中包含不同类型的对象,但是它们之间的相关性足以保证两个对象之间都存在循环,那么如何解决此问题?

我知道我不太可能会遇到足够高的整数而不会遇到问题,但是我仍然想编写良好,健壮的C ++代码。 也许我应该同时查看两个size_type并取其中的最小值? 那是路要走吗? 在我看来,这是一种奇怪的做法。

我不确定标准是否可以保证,但是无论您选择哪种模板参数,我都希望所有vector::size_type类型都相同。

std::allocator定义size_typesize_t ,所以你可以假设size_type作为size_t IIF可以保证有定义不同类型的他们没有自定义的分配size_type秒。

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

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

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

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

我怀疑您会在大多数代码中定期看到它(也不太可能是编写此圣诞节派对的敬酒)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM