В вашем коде много проблем, не уверен, что может охватить все. Наиболее важная проблема заключается в том, что нет причин возвращать необработанный указатель. Вместо этого верните вектор. Чтобы инициализировать вектор, вам просто нужно вызвать конструктор , который принимает количество элементов в качестве первого параметра (и обратите внимание, что std::pair
имеет конструктор по умолчанию ):
#include <utility>
#include <vector>
using pair_vector = std::vector<std::pair<int,int>>;
pair_vector foo() {
pair_vector result(20);
return result;
}
Чтобы вернуть вектор одной пары, вы можете написать
pair_vector get_vector_with_single_pair() {
return { {1 ,1} };
}
И если вы хотите заполнить вектор в цикле, вы можете сделать
pair_vector get_vector(int n) {
pair_vector result;
result.reserve( n );
for (int i=0;i<n;++i){
result.emplace_back( i,i );
}
return result;
}
(не) связанные проблемы
Здесь
if((X1-Xo) != 0 && ((Y1-Yo) == 0 || (Y1-Yo) != 0))
{
double m = (Y1-Yo)/(X1-Xo);
}
m
локально для тела if
. Скорее всего, вместо этого вы захотите использовать m
, объявленный в области функций. Как только вы исправите это, следующее, что нужно обнаружить, - целочисленная арифметика. Поскольку все задействованные переменные равны int
s, часть (Y1-Yo)/(X1-Xo)
будет использовать целочисленную арифметику, где, например, 5 / 6 == 0
. Я полагаю, это не то, что вы хотите, поэтому вам нужно привести к double
, прежде чем вы получите результат, например
double dy = Y1-Y0;
double dx = X1-X0;
m = dy / dx;
Более того, в некоторых случаях вы хотите вернуть вектор, содержащий Y1-Y0
элементов. Обратите внимание, что это не соответствует вашим счетчикам циклов:
for(int counter_y = Yo; counter_y <= Y1 ; counter_y++)
этот цикл имеет Y1-Y0+1
итераций, так что вы будете отключены на одну. Вы можете исправить это любым способом, но я настоятельно рекомендую вам использовать полуоткрытые интервалы, так как это то, что используют все стандартные алгоритмы. Значение, измените ваш цикл на
for(int counter_y = Y0; counter_y < Y1 ; ++counter_y)
// ^----------------------- Y1 is excluded
и настройте параметры, которые вы передаете соответственно.
И последнее, но не менее важное: выбирайте лучшие имена переменных. Ваш код будет намного легче читать, если, например, m
будет называться slope
. Для других я понятия не имею, что они есть.