c++ - 使用 `vector<A>::size_type ix` 索引 `vector<B>`

标签 c++ vector size-type

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

问题是,当我写一些 forvector<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_varA .具体来说,我关心的是,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> (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(); });

关于c++ - 使用 `vector<A>::size_type ix` 索引 `vector<B>`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34015810/

相关文章:

c++ - 使用预处理器定义在一组类型之间进行选择

从字符串中删除特定模式

c++ - 涉及将 vector 转换为 feed 到 execvp 的错误类型

intmax_t 可以容纳 size_t 吗?

c++ - 所有不同的尺寸类型如何相互关联?

c++ - 使用 fprintf 连续写入字符串

c++ - 我的组件需要访问者吗?

c++ - 从链表中释放内存

c++ - 跟踪 vector 元素地址

c++ - 如果 npos 为 -1,size_type 怎么可能是无符号整数?