2016-05-03 11 views
0

構造体配列から1行を削除する関数を作成しようとしていますが、削除したい行のインデックスと構造体配列に関数を与えます。例えば。我々は、構造体配列を持っている:構造体配列から1つのデータ行を削除する方法は? (インデックス付き)

Structure 
{ 
string First; 
string Second; 
string Third; 
string Fourth; 
string Fifth; 
} 

構造体配列:

A[i].First A[i].Second A[i].Fourth A[i].Fifth // i is the index 

当社の機能は、このようなものです::

Structure A[100]; 
int n; 

だから、この構造体配列の5つの文字列型の要素があります

void Delete(Structure A[], int index, int & n) 
{ 

Structure t; 

for (int i = index; i < n-1; i++) 
{ 
    t = A[i]; 
    A[i] = A[i + 1]; 
    A[i + 1] = t; 
    n--; 
} 
} 

だから私は関数のインデックスを与えると、そのインデックスを持つ私の構造体配列のすべての要素を削除する関数を(どのように私はそれらを1つずつ削除する代わりに、それらの要素の全体の線のように取ることができますか?)

しかし、この機能は動作しません。あなたは私にいくつかのヒント/アドバイス/提案をお願いできますか?前もって感謝します。最初のレベルで

+5

あなたはおそらくやりたいですループの後の 'n - ;' ...一般的な答え: 'ベクトル'を使用する – BeyelerStudios

+0

nは、インデックス 'index'から始まる要素の数です。それはなぜrefですか? – Jfevold

+0

nは、構造体に含まれる要素の行数を宣言します。この場合、n = 5としましょう。 – feco

答えて

1

、あなたの質問は基本的に:その使用サイズ(nとしてここに渡される)外部変数に記憶されている配列から行を削除する方法

あなたの関数のシグネチャは、実装正しいですそうではありません。それは次のようになります。

void Delete(Structure A[], int index, int & n) 
{ 

    // eventually control index >= 0 and index < n... 

    n -= 1; 
    for (int i = index; i < n; i++) 
    { 
     A[i] = A[i + 1]; 
    } 
} 

あなたが意味を動かすサポートするC++の最新バージョンを持っている場合は、代わりにそれらをコピーする文字列を移動することで操作をスピードアップすることができます:

n -= 1; 
    for (int i = index; i < n; i++) 
    { 
     A[i] = std::move(A[i + 1]); 
    } 
+0

ループを変更しても、私の機能が動作しているようには見えません。他に何が間違っているのでしょうか? – feco

+0

'--n'はすべての反復の前に実行されます。それはループの外側にあるはずです。 – Fozi

+0

@Fozi絶対に正しい。また、 'for()'ステートメント(3番目の位置に明示的に記載されているもの、ループそのものの全体を除く)に副作用を加えるのはベストプラクティス(私の意見では)にも反対です。 – Jfevold

関連する問題