构造向量C ++

时间:2012-02-24 00:27:41

标签: c++ vector constructor size-type

我目前正在为vector类实现构造函数(我的教授说我们可以省略任何使用分配器的东西)。我使用了教授给我们的参考网站来确定函数的格式:http://www.cplusplus.com/reference/stl/vector/vector/

我的功能出现了一些错误。其中两个错误是:

语法错误:标识符'size_type'

'value':未声明的标识符

知道为什么我会收到这些错误吗?这是我的代码:

explicit vector (size_type n, const T& value= T())
{
    my_vect=new int x[2*n];
    for(int i=0; i<n; i++)
    {
        vect[i]=value;
        length++;
    }
}

2 个答案:

答案 0 :(得分:1)

这段代码缺少相当多的上下文。这使得很难分辨出问题所在。从错误消息中,您似乎至少没有定义size_type。它看起来好像T没有被定义,这让我觉得你试图定义构造函数,但这看起来像这样:

template <typename T>
vector<T>::vector(size_type n, T const& value):
    my_vect(new T[2u * n]),
    length(n)
{
    for (size_type i(0); i != n; ++i) {
        my_vect[i] = value;
    }
   // or: std::fill_n(my_vect, n, value);
}

这也解决了一些错误(使用intTvectmy_vext,未初始化使用length)。请注意,在C ++中增加变量的惯用方法是使用preincrement(是的,该语言实际上应该被称为“++ C”,原因不仅仅是惯用法)。

答案 1 :(得分:1)

如果您在.h文件中定义类,则= T()是默认值。在.cpp或.cc文件中实现该方法时,将省略默认值。

size_type似乎不在全局范围内,因此您需要使用解析运算符来为其提供正确的范围。它似乎是std::string::size_type。这可能只是size_t的typedef。我在STL容器中看到size_type,但在创建自己的类时我从未使用它。

另外,正如DietmarKühl所说,在使用C ++模板时,你需要使用template <typename T>来装饰所有内容