So habe ich diesen Code, den ich geschrieben habe. Ich verstehe, dass es sehr einfach ist und wahrscheinlich niemals so gemacht werden sollte. Ich habe nur versucht, es zur Arbeit zu bringen. Das Problem ist, wenn meine push_back-Funktion aufgerufen wird, sind alle Variablen plötzlich durcheinander und es funktioniert nicht. So wie die Vektorgröße 1 wird und die Begrenzung eine zufällige große Zahl wird. Ich habe mich gefragt, was los ist und wie ich es beheben kann. Erstellen einer Vektorklasse C++ Fehler
Dies ist der Code für die Vektorklasse
#include "MyVector.h"
void MyVector::grow()
{
if (cap == 0)
cap = MINCAP;
else
cap = cap*MINCAP;
int* temp = new int[cap];
for (int i = 0; i < vectorSize; i++)
{
temp [i] = theVector[i];
}
delete[] theVector;
theVector = temp;
}
MyVector::MyVector()
{
clear();
}
MyVector::~MyVector()
{
}
MyVector::MyVector(int _cap)
{
cap = _cap;
}
int MyVector::size()
{
return vectorSize;
}
int MyVector::capacity()
{
return cap;
}
void MyVector::clear()
{
vectorSize = 0;
cap = MINCAP;
delete(theVector);
theVector = new int[MINCAP];
}
void MyVector::push_back(int n)
{
if (vectorSize+1 >= cap)
{
grow();
theVector[vectorSize] = n;
}
else
{
theVector[vectorSize] = n;
}
}
int MyVector::at(int _location)
{
return theVector[_location];
}
Dies ist der Code für das Treiberprogramm ist es zu testen.
// Project #12 Implementation file for the driver
// CS 1400 (your section)
// Your name
// the date
// ------------------------
#include "driver.h"
int main()
{
// Create a default vector
MyVector sam;
// push some data into sam
cout << "\nPushing three values into sam";
//It seems to be happening right here when the function is called
sam.push_back(TEST_VALUE1);
sam.push_back(TEST_VALUE2);
sam.push_back(TEST_VALUE3);
cout << "\nThe values in sam are: ";
// test for out of bounds condition here
// and test exception
for (int i = 0; i < sam.size() + 1; i++)
{
try
{
cout << sam.at(i) << " ";
}
catch (int badIndex)
{
cout << "\nOut of bounds at index " << badIndex << endl;
}
}
cout << "\n--------------\n";
// clear sam and display its size and capacity
sam.clear();
cout << "\nsam has been cleared.";
cout << "\nSam's size is now " << sam.size();
cout << "\nSam's capacity is now " << sam.capacity() << endl;
cout << "---------------\n";
// Push 12 values into the vector - it should grow
cout << "\nPush 12 values into sam.";
for (int i = 0; i < MAX; i++)
sam.push_back(i);
cout << "\nSam's size is now " << sam.size();
cout << "\nSam's capcacity is now " << sam.capacity() << endl;
cout << "---------------\n";
cout << "\nTest to see if contents are correct...";
// display the values in the vector
for (int i = 0; i < sam.size(); i++)
{
cout << sam.at(i) << " ";
}
cout << "\n--------------\n";
cout << "\n\nTest Complete...";
cout << endl;
system("PAUSE");
return 0;
}
Wenn Sie unten abstimmen möchten, bitte, aber sagen Sie mir auch, warum Sie unten abstimmen, damit ich für andere klären kann. – Mindstormer
lesen Sie Implementierungen von dem, was Sie implementieren möchten, bevor Sie versuchen, etwas Ähnliches zu implementieren. Informiere dich auch über RAII! [stl_vector.h] (https://gcc.gnu.org/onlinedocs/gcc-6.1.0/libstdc++/api/a01638_source.html), [stl_vector.tcc] (https://gcc.gnu.org/onlinedocs /gcc-6.1.0/libstdc++/api/a01719_source.html), [Vektorref.] (https://gcc.gnu.org/onlinedocs/gcc-6.1.0/libstdc++/api/a01032.html). – mash
Es ist nicht klar, welche Art von Fehler Sie bekommen, so dass Ihre Frage nicht klar ist. Posten Sie bei [codereview] (https://codereview.stackexchange.com) wenn Sie daran interessiert sind, warum Sie bestimmte Dinge nicht auf bestimmte Arten schreiben sollten. – mash