我正在开展一个项目,我必须为大学做些什么。我想做一个简单的容器程序,我的目标是,我可以添加尽可能多的名称,以及我想要的每个名称的多个属性。每个proberty都有一个标题(例如:" Name")和一个值(例如:" Jane")。
我已经使用包含的STL矢量类完成了它,但我应该在没有STL库的情况下完成它,所以我已经编写了自己的。当然,它现在还没有工作,一个程序冻结,然后就可以开始了。与错误相关,我发现" a_row"课程在课程期间被叫过两次,但我不明白为什么。
我想在这里批量复制很多行,但是我一直在搜索问题3天,没有人能找到问题,在我身边。以下是代码,我已经简化了它,为你:)
矢量类:
#include <iostream>
#include <string>
template <class T>
class vector{
T* my_array;
unsigned int vector_size;
public:
vector():vector_size(0){}
~vector(){
delete[] my_array;
}
vector(const vector& rhs){
vector_size = rhs.size();
my_array = new T[vector_size];
for(unsigned int i=0;i<vector_size;i++) my_array[i] = rhs[i];
}
T& operator[](unsigned int i) {return my_array[i];}
const T& operator[](unsigned int i) const {return my_array[i];}
vector& operator=(const vector& rhs){
if (&rhs!=this){
delete[] my_array;
vector_size = rhs.size();
my_array = new T[vector_size];
for(unsigned int i=0;i<vector_size;i++) my_array[i] = rhs[i];
}
return *this;
}
void push_back(const T& rhs){
T* tmp = new T[vector_size+1];
for(unsigned int i=0;i<vector_size;i++)
tmp[i] = my_array[i];
tmp[vector_size] = rhs;
delete[] my_array;
my_array = tmp;
vector_size++;
}
unsigned int size() const{return vector_size;}
void erase(unsigned int x){
if (vector_size>0){
T* tmp = new T[vector_size-1];
unsigned int counter = 0;
for (unsigned int i=0;i<vector_size;i++){
if (i!=x) {
tmp[counter++] = my_array[i];
}
}
delete[] my_array;
my_array = tmp;
vector_size--;
}
}
};
以下是联系人计划的类别:
class a_row{
std::string header;
std::string value;
public:
a_row(const std::string& h="No name",const std::string& v="No "):header(h),value(v){}
std::string geth() const{return header;}
std::string getv() const{return value;}
};
class a_name_card{
vector<a_row> properties;
public:
a_name_card(const std::string& f1="No name",const std::string& e1="No name"){
properties.push_back(a_row(f1,e1));
}
unsigned int size()const{return properties.size();}
a_row& get_a_row(int i){return properties[i];}
void add(const std::string& f1="No name",const std::string& e1="No name"){
properties.push_back(a_row(f1,e1));
}
};
class list_of_name_cards{
vector<a_name_card> array_of_names;
public:
a_name_card& operator[](int i){return array_of_names[i];}
void add(const std::string& f1="No name", const std::string& e1="No name"){
array_of_names.push_back(a_name_card(f1,e1));
}
unsigned int size() const{return array_of_names.size();}
};
以下是简单的主程序:
int main(){
list_of_name_cards names;
names.add("Name","Jane");
return 0;
}
如果您已经阅读过,我会非常感谢您的帮助和感谢。
p.s。:对不起我的英语,但英语不是我的母语。
答案 0 :(得分:3)
您需要初始化变量:
vector():vector_size(0){}
my_array
怎么样?
vector():my_array(nullptr), vector_size(0){}