2016-07-23 2 views
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; 
} 
+0

あなたはこれを投票したいのですが、あなたがそれを投票している理由を教えてください。私は他人を明確にすることができます。 – Mindstormer

+0

のようなものを実装しようとする前に実装したいものの実装を読んでください。 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

+0

どのようなエラーが出るのかははっきりしないので、あなたの質問は明確ではありません。あなたが特定の事柄を特定の方法で書くべきではない理由に興味があるなら、[codereview](https://codereview.stackexchange.com)に投稿してください。 – mash

答えて

0

あなたは、あなたのクラスのprivateメンバーを示したが、capは、割り当てられたメモリのサイズであると仮定されていませんメモリを割り当てずに容量を設定するコンストラクタやデストラクタがないなど、他にも多くの問題があることに注意してください。 newが投げることもできることを忘れないでください。

関連する問題