2016-11-30 19 views
-2

私はC++を学んでいて、自分自身を10,000行以上のテキストファイルにしました。私は文字列配列を作成し、最初の配列に最初の行を挿入しようとしています、2番目の行に2番目の配列など。ここで私はこれまで何をやったかである:C++で文字列配列を割り当てる方法は?

ifstream theFile; 
string inputFile; 
cin >> inputFile; 
theFile.open(inputFile.c_str()); 
const unsigned int ARRAY_CAP = 64U; 

string line; 
string *lineArr = new string[ARRAY_CAP]; 

if (theFile.is_open()) { 
    int lineNumber = 0; 
    while (!theFile.eof()) { 
     getline(theFile, line); 
     lineArr[i] = line; 
     i++; 
    } 
} 

私の友人は、私がメモリ不足していますので、文字列配列を割り当てるために私に言ったが、私はそれを行う方法にもわかりません。どのように文字列配列を割り当てることができますか?

+8

'std :: vector >'を使用するだけではどうですか?また、 "while(!theFile.eof())"はあなたが望むことをしません。 –

+1

[std :: vector](http://en.cppreference.com/w/cpp/container/vector)を使用して、割り当てを忘れてしまいます。 –

+0

@JesperJuhl私は配列を割り当てる方法も知りたいです。私の兄は、大学では常に配列を割り当てていると言ってくれました。 :/ – James

答えて

0

動的に割り当てられた配列を維持したい場合は、動的に配列を拡張する必要があります。

unsigned int lines_read = 0U; 
std::string text_line; 
unsigned int capacity = 4U; 
std::string * p_array = new std::string[capacity]; 
while (std::getline(theFile, text_line)) 
{ 
    p_array[lines_read] = text_line; 
    ++lines_read; 
    if (lines_read > capacity) 
    { 
    // Allocate new array with greater capacity. 
    unsigned int old_capacity = capacity; 
    capacity = capacity * 2U; 
    std::string p_new_array = new std::string[capacity]; 
    std::copy(p_array, p_array + old_capacity, p_new_array); 
    delete [] p_array; 
    p_array = p_new_array; 
    } 
} 

std::vectorはあなたのために同様のメモリ管理を行うので、あなたは、上記の操作を行う必要はありません。

関連する問題