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
答案 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个字节))。