【发布时间】:2016-03-05 02:30:39
【问题描述】:
这可能是一个微不足道的问题。通常,我需要定义本地std::vectors,如vector<int>、vector<double> 等来存储vector<A> 的一些中间值,其中A 是一个自定义类。这些本地vectors 应该与vector<A> 具有相同的大小。
问题是,当我写一些for 将值从vector<A> 分配给本地vectors 时,这样写是不是不好(PS:vect_a 的大小在循环。)
vector<A> vect_a;
vector<int> local_vect;
...
for (vector<A>::size_type ix = 0; ix != vect_a.size(); ++ix) {
local_vect[ix] = vect_a[ix].get_mem_var();
...
}
其中get_mem_var() 只返回A 的int mem_var。具体来说,我担心的是,local_vect 属于vector<int>,而不是vector<A>,但它仍然使用ix,它属于vector<A>::size_type,而不是vector<int>::size_type。
有时我会让它变得更复杂一些,比如
for (struct {vector<A>::size_type ix; vector<int>::size_type iy;}
gi = {0, 0}; gi.ix != vect_a.size(); ++gi.ix, ++gi.iy) {
local_vect[gi.iy] = vect_a[gi.ix].get_mem_var();
...
}
但感觉是多余的和不必要的。我听说size_type 通常只是size_t,使用vector<A>::size_type ix 索引vector<int> local_vect 可能就可以了。但这在某种程度上是不好的做法吗?一个更普遍的问题是,如果我们知道vector<A> 和@987654353,可以使用vector<A>::size_type ix 来索引vector<A> 和vector<B>(A 和B 可以是内置的或用户定义的) @ 应该有相同的大小?
【问题讨论】:
-
你仍然可以检查类似
static_assert(std::is_same<vector<A>::size_type, vector<int>::size_type>::value, "type differ");的内容。 -
如果你真的担心你可以 static_assert 来检查它们是否相同(或者至少
A更大)......实际上我认为你会发现这种类型总是std::size_t