我决定在课堂上训练自己并构建一个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
中没有任何反应,至少在调用析构函数之前是这样。