Вот код, над которым я работаю:
#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
Затем я использую свою программу, чтобы ввести эти цифры в вектор и распечатать этот вектор в том же формате
Может кто-нибудь сказать мне, как это правильно сделать?
Я сослался на следующий для кода, но мне нужно прочитать и распечатать в формате, указанном выше, и я не уверен, что лучший способ продолжить.
Для большей ясности — я пытаюсь реализовать алгоритм выпуклой оболочки. Я одновременно пытаюсь стать лучше в программировании и, следовательно, такой скачок.
Вопрос: Почему ты смешиваешь 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>
для размещения ваших координат в.
Это может быть немного излишним для чего-то такого простого, но я бы перегрузил операторы вывода и ввода 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;
}