0

以下は私が取り組んでいるコードです -

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

using namespace std;

struct coord {
long x,y;
};

int main()
{
ifstream nos("numbers.txt");
vector< long > values;
double val;
while ( nos >> val )
{
    values.push_back(val);
}

copy(values.begin(), values.end(), ostream_iterator<double>(cout, "\n" ));
return 0;

}

ここでは初期構造体が必要ないことは理解していますが、それを使用したいと考えています。入力テキストファイルを次のようにしたい-

1,2
2,3
4,5

次に、プログラムを使用して、これらの数値をベクトルに入力し、そのベクトルを同じ形式で出力します

誰かがそうする正しい方法を教えてもらえますか?

コードについては以下を参照しましたが、上記の形式で読み取って印刷する必要があり、どのように進めるのが最善の方法かわかりません。

わかりやすくするために、凸包アルゴリズムを実装しようとしています。私は同時にプログラミングを上達させようとしているので、そのような飛躍があります。

4

2 に答える 2

0

この単純なものには少しやり過ぎかもしれませんが、ostream と istream の出力演算子と入力演算子をそれぞれオーバーロードします。

編集:構造体にはデフォルトのパブリック変数があるため、フレンド クラスは必要ないと思いますが、<< と >> をオーバーロードする一般的な方法であるため、保持します。

struct coord {
    long x,y;

    friend class ostream;
    friend class istream;
};

istream& operator>>( istream& is, coord& c )
{
     char comma;
     return is >> c.x >> comma >> c.y;
}

ostream& operator<<( ostream& os, const coord& c )
{
     char comma = ',';
     return os << c.x << comma << c.y;
}

int main()
{
    ifstream nos("numbers.txt");
    vector< coord > values;

    coord val;
    while ( nos >> val )
        values.push_back(val);

    for each( value : values )
        cout << value << endl;

    return 0;
}
于 2013-08-30T03:40:50.420 に答える
0

質問: なぜ と を混ぜdouble longいるのですか? longコード全体で使用したいと思います。,必要なことを行う最も簡単な方法は、数字の間を読み取るダミー変数を追加することです。

int main()
{
ifstream nos("numbers.txt");
vector< long > values;
long val1, val2;
char dummy;
while ( nos >> val1 >> dummy >> val2)
{
    values.push_back(val1);
    values.push_back(val2);
}

copy(values.begin(), values.end(), ostream_iterator<long>(cout, "\n" ));
}

また、 という名前の構造体を定義しcoordましたが、コードでは使用していません。それを使用したい場合は、次のコードを使用できます。

std::ostream& operator<<(std::ostream& os, const coord& c)
{
    os << c.x << " " << c.y;
    return os;
}

int main()
{
ifstream nos("numbers.txt");
vector< coord > values;
coord c;
char dummy;
while ( nos >> c.x >> dummy >> c.y )
{
    values.push_back(c);
}

copy(values.begin(), values.end(), ostream_iterator<coord>(cout, "\n" ));
}

また、C++11 では、コードを次のように変更できます。

long x, y;
char dummy;
while ( nos >> x >> dummy >> y )
{
    values.emplace_back(coord{x, y});
}

std::pair<long, long>または、座標を配置することも検討できます。

于 2013-08-30T03:30:22.687 に答える