获取保证通过不同类型的向量进行索引的size_type
Getting a size_type that is guaranteed to work for indexing through vectors of different types
假设我有两种类型,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_type
vector<Class2>
与vector<Class1>
相同的不是不好吗?
在这些情况下,您有两个相同大小的向量包含不同类型的对象,但它们的相关性足以保证遍历它们,如何解决此问题?
我知道我不太可能达到足够高的整数来遇到问题,但我仍然想写出好的、健壮的、C++的代码。也许我应该看看两个size_type
并采取最少的?这是要走的路吗?对我来说听起来像是一种奇怪的做法。
std::allocator
将size_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++)
// ...
我怀疑你会在大多数代码中定期看到这一点(也很可能也不是圣诞派对上写它的祝酒词)。
相关文章:
- 数组索引的值没有增加
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 大于65535的C++数组[size]引发不一致的溢出
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 为什么(-1)%vector::size()总是返回0
- 重载元组索引运算符-C++
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 为std::string的某个索引赋值
- 并行用于C++17中数组索引范围内的循环
- 跟随整数索引列表的自定义类迭代器
- 如何在for循环中包含两个索引值的测试条件
- D3D11-将混合权重和索引传递到顶点着色器
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 将转换字符键入 int 以用作向量C++的索引
- 在 C++ 中访问数组负索引处的内存不会返回垃圾
- 如何为圆环创建索引
- std::vector size()-1 ALWAYS给出最后一个元素的索引吗?