0
私はこのコードを書いています。私はそれが非常に基本的であり、決してこれのように行われるべきではないと理解しています。私はそれを働かせようとしていました。問題は、私のpush_back関数が呼び出され、すべての変数が突然混乱し、うまく動作しない場合です。ベクトル化のようなものは1になり、キャップはランダムな大きな数になります。私は何が起こっていたのか、それをどう修正するのかと思っていました。ベクトルクラスを作成するC++エラー
これは、それをテストするためのドライバプログラムのためのコードであるベクタークラスのコード
#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];
}
あります。
void MyVector::push_back(int n)
{
if (vectorSize == cap)
// if it's full ^^ needs more space
{
grow();
}
theVector[vectorSize] = n;
// update the size after insertion
++vectorSize;
}
てください:vectorSize
は一back関数は可能性があり、実際の大きさである一方、
// 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;
}
あなたはこれを投票したいのですが、あなたがそれを投票している理由を教えてください。私は他人を明確にすることができます。 – Mindstormer
のようなものを実装しようとする前に実装したいものの実装を読んでください。 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)、[vector ref](https://gcc.gnu.org/onlinedocs/gcc-6.1.0/libstdc++/api/a01032.html)。 – mash
どのようなエラーが出るのかははっきりしないので、あなたの質問は明確ではありません。あなたが特定の事柄を特定の方法で書くべきではない理由に興味があるなら、[codereview](https://codereview.stackexchange.com)に投稿してください。 – mash