使用模板类创建自己的vector.size和vector.capacity函数?

时间:2013-11-01 11:54:13

标签: c++ function templates vector call

file.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;
}

通过以下方式获得巨大错误:(UNSOLVED)

findSize(vect)

findCapacity(vect)

上面的模板/通话有什么不对? ^^^

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

根据建议,未经编辑的错误: http://pastebin.com/Qw1GPdkM

1 个答案:

答案 0 :(得分: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函数应返回大小(即您的计数器)而不是模板类型。考虑一下如果在向量中存储结构,为什么要在获取大小时返回该结构类型?所以将其改为例如int是一个好的开始。另一个好处是不使用指针作为计数器,应该使用plain int(特别是因为增加指针会使其增加底层类型的大小,所以对于int指针它将会增加4(int是32位,4个字节))。