提问者:小点点

为什么我的程序显示空向量?


我不明白为什么我的程序显示nul向量:

#include <vector>
#include <iostream>


template <class T>
std::vector<int> collect_values(const T & t, int first, int next_to_last) {
    std::vector<int> v(next_to_last-first);
    for(int i=0; i<next_to_last - first; i++) {
        v[i] = t(v[i]);
    }
    return v;
}

int main() {
    int a=0, b=5;
    auto square=[](int i) {return i*i;};
    std::vector<int> v;
    v = collect_values(square,a,b);
    for(int i=0; i<b-a; i++) {
        std::cout << v[i] << std::endl;
    }
    return 0;
}

好的,在循环结束时,函数中的向量将被删除。 但是我存储了那个函数,所以向量也应该存储,对吗? 如果collect_values循环中的向量v已经被删除,为什么我会有一个有5个空单元格的向量而不是空向量呢?


共1个答案

匿名用户

在collect_values中

std::vector<int> v(next_to_last-first);

因为next_to_last-first值为5,所以创建了一个大小为5的向量,其中所有元素的值为0

v[i] = t(v[i]);

因为t返回正方形或其参数,但每个元素值为0,所以向量不变,将所有条目重新分配为0

return v;

返回包含5乘以0的向量

主要地

v = collect_values(square,a,b);

将v分配给包含5乘以0向量

for(int i=0; i<b-a; i++) {
    std::cout << v[i] << std::endl;
}

然后在一行上打印5乘以0

如果将collect_values中的v[i]=t(v[i]);替换为v[i]=t(i);,则将打印

0
1
4
9
16