0

ベクター消去機能がおかしい。私がしたいのは、ベクトルの最初の要素を消去することだけです。

詳細は次のとおりです。cv というオブジェクト ポインターを作成しました。このオブジェクト ポインターのクラス内には、v と呼ばれる整数ベクトルがあります。これには、数値のリストがあります。

このオブジェクト ポインターは、コンベア ベルトの影響を再現するためのものです。私がやりたいことの1つは、ベルトを前進させることです。これは、ベクトルで言えば、一番上の数字を削除することを意味します。

v.erase(v.begin())これを行うために、ベルトを前進させるメソッドを書きました。しかし、これを実行すると、うまくいきませんでした。ずっと同じものを見ている無限ループに陥ってしまいました。

私はそれから試しv.erase(0)ましたが、これはまだうまくいきませんでした。範囲から削除しようとしましたが、それでもうまくいきません。奇妙なことに、ベクトルに問題なく追加でき、その中のアイテムを検索できます。削除できないだけです。どんな助けでも大歓迎です。私からさらに情報が必要な場合はお知らせください。

関連するコードを次に示します。

class Belt()
{
vector<int> v;
public:
void MoveBelt();
};

void Belt::MoveBelt()
{
    v.erase(v.begin());
}

int main()
{ 
    char filename[256];
    Belt *cc = new Belt(filename);

    if(condition met)
    {
       cc->MoveBelt();
    }
}

便宜上、ファイルからデータを読み込むコンストラクターも、項目をベクターに追加するメソッドも含めていません。ご覧になり、他に必要なものがあればお知らせください。

4

1 に答える 1

0

v.erase(v.begin());以下は、実際に機能することを示す完全な例です。それに基づいて、あなたの状態が壊れていると思います。ところで、なぜヒープにオブジェクトを正確に割り当てているのですか? そうする必要はないようです。

#include <algorithm>
#include <initializer_list>
#include <iostream>
#include <iterator>
#include <vector>

class Belt
{
    std::vector<int> v;
 public:
    Belt(std::initializer_list<int> list): v(list.begin(), list.end()) {}
    bool empty() const { return v.empty(); }
    std::vector<int>::const_iterator begin() const { return v.begin(); }
    std::vector<int>::const_iterator end() const { return v.end(); }
    void MoveBelt();
};

std::ostream& operator<< (std::ostream& out, Belt const& belt)
{
    std::copy(belt.begin(), belt.end(),
              std::ostream_iterator<int>(std::cout << '[', " "));
    return out << ']';
}

void Belt::MoveBelt()
{
    v.erase(v.begin());
}

int main()
{ 
    Belt cc{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    while (!cc.empty()) {
        std::cout << cc << "\n";
        cc.MoveBelt();
    }
}
于 2013-09-06T22:13:07.500 に答える