这可能是一个微不足道的问题。通常,我需要定义本地 std::vector
就像vector<int>
, vector<double>
等为 vector<A>
存储一些中间值其中 A
是一个自定义类。这些本地vector
s 应该与 vector<A>
具有相同的大小 .
问题是,当我写一些 for
从 vector<A>
赋值到本地vector
s,这样写是不是不好的做法(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()
简单地返回 int mem_var
的 A
.具体来说,我关心的是,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>::size_type ix
吗?索引 vector<A>
和 vector<B>
(A
和 B
可以是内置的或用户定义的)如果我们知道 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(); });
关于c++ - 使用 `vector<A>::size_type ix` 索引 `vector<B>`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34015810/