创建矢量类

时间:2015-04-25 12:43:47

标签: c++ vector

我决定在课堂上训练自己并构建一个vecofint类,它类似于vector容器,有多种方法。

我的程序效果很好,但我发现我并不完全理解某些原则。

1。默认值:

这是我的班级:

class vecofint {
public:
    vecofint() : vec(new int[size1]) { zeros(); }
    ~vecofint() { delete vec; }
    vecofint(const int size) { set(size); vec = new int[size1]; zeros(); }
    vecofint& operator = (const vecofint& other) { vec = other.vec; size1 = other.size1; vec1 = other.vec1; }
    vecofint(const vecofint& other) : vec(other.vec), size1(other.size1), vec1(other.vec1) {}
    int getin(const int a) { return vec[a]; }
    int get() { return size1; }
    void set(const int a) { size1 = a; }
    void setin(const int a, const int val) { vec[a] = val; }
    int* pushback(const int val);
    int* pushfront(const int val);
    int* it;
    void resize(); 
    void resize1();
    void zeros() {int * i = vec; fill(i, i + size1, 0);}
    void print() { copy(vec, vec + size1, ostream_iterator<int>(cout, "\n")); }
private:
    int size1 = 32;
    int* vec;
    int* vec1;
};

如您所见,我将创建的vector的所有值都指定为0.我这样做有两个原因:

a)我发现了

vector <int> a(10);
copy(a.begin(), a.end(), ostream_iterator<int>(cout, " "));

打印0 0 0 0 0 0 0 0 0 0;

b)我需要一些默认值来实现我的pushback方法:

int* vecofint::pushback(const int val) {
    int k = 0;
    int* it = vec;
    while (*it!=0) {
        if (k == size1) {
            resize();
            it = vec+size1/2;
        }
        ++k;
        ++it;
    }
        vec[k] = val;
        return vec;
}

我使用零。但我不喜欢这样,因为这意味着我无法将0用作非默认值

第一个问题:

我如何基本上避免将这些赋值给零,但仍然有基本值来遍历vector?或者也许还有其他方法可以迭代新创建的空间?

2)负面指数

假设我错误地尝试访问否定索引。

第二个问题:

在这种情况下我的程序应该写什么?有些错误吗?

我发现在真实vector中没有任何反应,至少在调用析构函数之前是这样。

0 个答案:

没有答案