0

文件.h:

template<class T>
T findSize(T &var){
    int *i = 0; //Pointer so that it retains its value after loop finishes.
    while(var.empty() != true){
        i++;
        var.pop_back();
    }
    cout << i << endl;

    return i;
}

template<class T>
T findCapacity(T &var){
    //How would I find the capacity?
    //This is the reason for the template, the capacity must increment by 10.
    //e.g. 10 elements = 20 capacity, 20 capacity, 30 capacity.
    //opposed to 1, 2, 4, 8...

    return something;
}

我如何从 main.cpp 调用函数:

    int temp;
    for(int i = 0; i < 50; i++){
        cin >> temp; //accepts number inputs from user (50 of them)
        vect.push_back(temp);

        cout << "Size: " << findSize(vect) << " Capacity: " << findCapacity(vect) << endl;
}

巨大的错误是通过以下方式获得的:(未解决)

findSize(vect)

findCapacity(vect)

我上面的模板/调用有什么不正确的?^^^

还有什么是找到容量的正确算法?

如建议的那样,未经编辑的错误: http: //pastebin.com/Qw1GPdkM

4

1 回答 1

0

跟踪大小和容量的常用方法是在类中包含成员变量。

以这个简单的int向量类为例:

class int_vector
{
public:
    // Some public functions

private:
    size_t size;      // The current size
    size_t capacity;  // The current capacity
    int*   data;      // The actual "vector" data
};

每当您向上述向量添加一个值时,您都会增加size,并在删除项目时减少它。分配和重新分配数据时的容量也是如此。


至于你的一些错误。当前getSize函数应该返回大小(即您的计数器)而不是模板类型。想想如果你在向量中存储一个结构,为什么在获取大小时要返回那个结构类型?因此,将其更改为 egint是一个好的开始。另一个好处是不要使用指针作为计数器,int应该使用普通的(特别是因为增加指针会增加底层类型的大小,所以对于int指针它将增加 4(int是 32 位,4 字节))。

于 2013-11-01T12:36:02.230 回答