使用模板类创建我自己的 vector.size 和 vector.capacity 函数?
Posted
技术标签:
【中文标题】使用模板类创建我自己的 vector.size 和 vector.capacity 函数?【英文标题】:Using template classes to create my own vector.size and vector.capacity functions? 【发布时间】:2013-11-01 11:54:12 【问题描述】:文件.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
【问题讨论】:
您没有用“”指定类型 嗯,你清空一个容器以便找到它的大小? oO And "int *i = 0; //指针,以便在循环结束后保持其值。" 不,不,不。我不确定你想用它来达到什么目的,但这不会起作用。 如果您询问编译错误,请始终在问题中包含所有,未编辑。我的猜测是,它可能与将指向int
的指针作为 T
返回有关。
您写了findSize
来获取参数。但是你没有通过。
@KresimirBukovac 如何将size_t mysize;
之类的内容添加到您的var
类型中并将计数保持为类不变?这是显而易见的方法。
【参考方案1】:
跟踪大小和容量的常用方法是在类中添加成员变量。
以这个简单的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
是一个好的开始。另一个好处是不使用计数器指针,应该使用普通的int
(特别是因为增加指针会增加底层类型的大小,所以对于int
指针,它将增加4( int
是 32 位,4 个字节))。
【讨论】:
当然,谢谢。如果在所有元素都已经存储在向量中时无法获得大小,这就是我计划做的事情。 我已经改变了那个功能。它现在有 size_t 大小;在 while 循环中,我使 size = i;因此,正在返回大小。以上是关于使用模板类创建我自己的 vector.size 和 vector.capacity 函数?的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中为我自己的自定义向量模板类实现迭代器(类似于 STL)[重复]