#c #vector
#c #вектор
Вопрос:
У меня есть этот алгоритм, который я хочу отредактировать, чтобы он принимал два вектора. Два вектора создаются из данных в файле csv, и я хочу сравнить данные в двух векторах. Приведенный ниже алгоритм принимает только один вектор, содержащий оба значения, которые необходимо сравнить, но я хочу изменить его так, чтобы он мог принимать два отдельных вектора и сравнивать значения между двумя векторами.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <string>
using namespace std;
// Some data
istringstream str( "1 3n"
"2 5n"
"3 7n"
"4 9n"
"5 11n" );
//======================================================================
struct Data{ double x, y; };
//======================================================================
vector<Data> getData( istream amp;in )
{
vector<Data> resu<
for ( double x, y; in >> x >> y; ) result.push_back( { x, y } );
return resu<
}
Комментарии:
1. вы объяснили, что вы хотите сделать, но что мешает вам это сделать?
2. вы должны исправить это
cout fmt d.x fmt d.y fmt m * d.x c << 'n';
перед изменением кода3. тогда это проблема, которую вы должны решить в первую очередь: прочитайте о линейной регрессии.
4. вектор содержит
Data
, который имеетx
иy
. Почему вы хотите вместо этого использовать два отдельных вектора?
Ответ №1:
Алгоритм работает со структурой, которая имеет оба x
и y
. Самым простым было бы скопировать ваши отдельные векторы в такую структуру:
std::vector<Data> transform(const std::vector<double>amp; x, const std::vector<double>amp; y) {
std::vector<Data> result(x.size());
for (int i=0; i < x.size(); i) {
result[i] = { x[i], y[i] };
}
return resu<
}
Это довольно дорого, потому что копирует все данные. Может быть, вы можете изменить код, который дает x
результат, и y
так, чтобы вместо этого он производил a std::vector<Data>
. Если вы хотите изменить алгоритм, вам просто нужно заменить любое вхождение std::vector<Data> v
на два отдельных std::vector<double> x,y
, и каждый v[i].x
на x[i]
.
PS фактическая проблема с алгоритмом заключается в том, что он работает с контейнерами вместо итераторов. Если алгоритм будет использовать итераторы, было бы проще использовать его с контейнерами другого типа, без необходимости копировать данные или изменять алгоритм.
Комментарии:
1. @ahmadalibin вы можете поместить определение
Data
в отдельный заголовок и включить его там, где вам это нужно