使用模板类创建我自己的 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)[重复]

递归向量返回

android 自己创建一个凝视模板

转:IDEA 创建类注释模板和方法注释模板

比较处理 int 和 std::vector::size_type

结构的 vector.size() 将返回啥?