永发信息网

程序最下面这句T& operator[](int pos){return data[pos];}为什么要引用&operator

答案:2  悬赏:80  手机版
解决时间 2021-04-07 21:00
  • 提问者网友:火车头
  • 2021-04-07 09:52
#include
using namespace std;
typedef int T;
class Vector{
T* data;
int size;
int max;
void expend(){
max = 2*(max==0?1:max);
T* n = new T[max];
for(int i=0; i n[i] = data[i];
}
delete[] data;
data = n;
}
public:
friend ostream&
operator<<(ostream&o,const Vector&v){
for(int i=0; i o << v.data[i] << ' ';
}
return o;
}
explicit Vector(int len=0):size(),max(len)
{data = new T[len];}
~Vector(){delete[] data;}
Vector(const Vector& v){
size = v.size;
max = v.max;
data = new T[max];
for(int i=0; i data[i] = v.data[i];
}
}
Vector& operator=(const Vector&v){
if(this==&v) return *this;
delete[] data;
data = new T[v.max];
for(int i=0; i data[i] = v.data[i];
}
size = v.size;
max = v.max;
return *this;
}
//增加一个数据元素
void insert(const T& d){
insert(d, size);
}
void insert(const T& d, int pos){
if(pos<0||pos>size) pos=size;//越界放到最后
if(size==max){ expend();}
for(int i=size; i>pos; i--){
data[i] = data[i-1];
}
data[pos] = d;
size++;
}
//删除指定位置的数据
bool erase(int pos){
if(pos<0||pos>=size) return false;
for(int i=pos; i data[i] = data[i+1];
}
size--;
return true;
}
//删除所有等于d参数元素
void remove(const T& d){
for(int i=0; i if(data[i]==d) erase(i--);
}
}
//修改指定位置的数据
bool set(const T& d, int pos){
if(pos<0||pos>=size) return false;
data[pos] = d;
return true;
}
//根据指定位置返回值
T& at(int pos){
if(pos<0||pos>=size) throw "out_of_index";
return data[pos];
}
//返回当前长度
int getSize(){return size;}
T& operator[](int pos){return data[pos];}
};
最佳答案
  • 五星知识达人网友:未来江山和你
  • 2021-04-07 10:59
如果时读的话同不加&对int类型的数据是一样的,如果是结构体等,会少一次拷贝操作
写的话就很不同了Vector m(10);
m[1]=15;
如果不用引用下次读m[1]不会修改m[1]的内容只是修改返回的临时变量。
全部回答
  • 1楼网友:想偏头吻你
  • 2021-04-07 12:16
没看懂什么意思?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯