Я довольно новичок в C ++ и в настоящее время выполняю школьное задание по векторам.Заголовочный файл содержит реализацию функций, необходимых для удовлетворения требований.Я почти закончил с программой, но, к сожалению, в конце ее выполнения она выдала сообщение «aborted core dumped».Я не могу понять, почему это так.Все отлично работало до конца.Именно во время теста присваивает это сообщение.Мне понадобится ваша экспертиза по этому вопросу.Спасибо!
Мой вывод:
********** TestAssign **********
push_back 10 floats:
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
0 1 2 3 4 5 6 7 8 9 (size=10 capacity=16)
Assign: b = a, print a,b
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
Assign: a = a, print a
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
Aborted (core dumped)
Вывод школы (правильный):
********** TestAssign **********
push_back 10 floats:
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
0 1 2 3 4 5 6 7 8 9 (size=10 capacity=16)
Assign: b = a, print a,b
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
Assign: a = a, print a
0 2 4 6 8 10 12 14 16 18 (size=10 capacity=16)
Заголовочный файл (Моя реализация):
template <typename T>
vec
{
private:
T* v;
int count;
int capacity;
public:
vector(){ //default constructor
capacity=0;
v = nullptr;
count = 0;
}
vector(const vector& b) //copy contructor
{
count = b.count;
capacity = b.capacity;
v = new T[capacity];
for (int i = 0; i < capacity; i++)
{
this->v[i] = b.v[i];
}
}
vector(vector&& tmp): v(tmp.v),//move constructor
count(tmp.count),
capacity(tmp.capacity)
{
tmp.v = nullptr;
}
~vector() {//destructor
if (v != NULL);
{
delete [] v;
v = NULL;
}
}
void push_back(const T& t)
{
if(count+1>capacity)
{
capacity = std::max(2*capacity, 1);
T* newData = new T[capacity];
for(int i=0; i <count; i++)
{
newData[i] = v[i];
}
delete[] v;
v = newData;
}
v[count++] = t;
}
T pop_back() {
//..
}
size_t size() const
{
//..
}
bool empty()
{
//..
}
T operator[](unsigned index) const //subscript operator
{
//...
}
T& operator[](unsigned index) //subscript operator
{
//...
}
void clear(){
//...
}
void erase(T position)
{
//...
}
void insert(int index, T number)
{
//...
}
vector& operator = (const vector &rhs) //copy assignment
{
../
}
vector& operator=(vector&& rhs) { //move assignment
if (this != &rhs) {
delete[] v;
this->v = rhs.v;
rhs.v = nullptr;
}
return *this;
}
template <typename T1>
friend void Print(const vector<T1>& s); //friend print
friend void Print(const vector<unsigned char>& s); //friend print if
//unsigned
};
template <typename T1>
void Print(const vector<T1>& s)
{
// std::cout << std::fixed << std::setprecision(2);
for(int i = 0; i < s.count; i++)
{
std::cout<<s.v[i]<<" ";
}
std::cout<< "(size=" << s.count << " " << "capacity=" << s.capacity <<
")";
std::cout<<std::endl;
}
void Print(const vector<unsigned char>& s)
{
//...
}
Основной файл:
void TestAssign(void)
{
std::cout << "\n********** TestAssign **********\n";
cs150::vector<float> a, b;
std::cout << "push_back 10 floats:\n";
for (float i = 0; i < 10; i++) {
a.push_back(2 * i);
b.push_back(i);
}
Print(a);
Print(b);
std::cout << "Assign: b = a, print a,b\n";
b = a;
Print(a);
Print(b);
std::cout << "Assign: a = a, print a\n";
a = a;
Print(a);
}