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

问题:你为什么要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 回答
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 回答