使用`vector<A>::size_type ix`来索引`vector<B>`

Use `vector<A>::size_type ix` to index `vector<B>`

这可能是一个微不足道的问题。通常,我需要定义本地 std::vectors,如 vector<int>vector<double> 等来存储 vector<A> 的一些中间值,其中 A 是自定义的 class。这些本地 vector 应该具有 vector<A> 相同的大小

问题是,当我写一些 for 来将 vector<A> 中的值分配给本地 vector 时,这样写是不是不好的做法 (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() 只是 returns Aint mem_var。具体来说,我担心的是,local_vectvector<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>::size_type ix 索引 vector<A>vector<B> 是否可以(AB 可以是内置的或用户定义的) 如果我们知道 vector<A>vector<B> 应该具有相同的大小?

实际上,std::vector<T>::size_type 可能对任何 T 都是一样的,因此这不是您需要担心的事情。

不过,您可以通过使用 std::transform 来避免担心这一点,例如:

vector<A> vect_a;
vector<int> local_vect;

std::transform(std::begin(vect_a), std::begin(vect_b), std::begin(local_vect),
               [] (const A& a) { return a.get_mem_var(); });