char str1[5]; char str2[3]; fgets(str1,5,stdin); fgets(str2,3,stdin);
Я ожидаю, что при запуске введу слово из 5 букв, потом слово из 3
fgets() reads in at most one less than size characters from stream
and stores them into the buffer pointed to by s.
Reading stops after an EOF or a newline.
If a newline is read, it is stored into the buffer.
std::auto_ptr
является устаревшим и удален из стандартной библиотеки начиная со стандарта C++17.std::unique_ptr
.std::auto_ptr
мог следить только за памятью одного экземпляра. Передать туда память массива можно, но деструктор будет вызван только у первого экземпляра массива. В общем смысле это означает утечку памяти.std::unique_ptr
, наоборот, способен контролировать память как единичного экземпляра, так и массива экземпляров. Еще в отличии от своего устаревшего товарища, std::unique_ptr
способен спокойно передавать свое состояние, не создавая возможность двойного освобождения памяти. В дополнение, std::unique_ptr
еще способен пользоваться нестандартными деструкторами, что очень кстати при работе, например, с COM-объектами или нестандартной схемой аллокации памяти.main
.На данный момент обучаюсь программированию по книге "You don't know Javascript"обучаться программированию (читай - учиться программировать) на JS - тоже самое, что обучаться водить легковой автомобиль с помощью бульдозера. JS совсем не подходит для обучения программированию.
стоит ли мне сейчас действительно вдумчиво изучатьнет
ptd = (double *) calloc(sizeof(double), 10);
что значить Звёздочка после типа?
Для чего после double стоит *, ведь это символ разыменования, а что мы разыменуем?
Зачем перед malloc стоит (double*)
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <string>
#include <fstream>
#include <cmath>
#include <functional>
using namespace std;
class Finder
{
public:
list<vector<double>> lines; //список, в котором информация
vector<double> input = {0, 0}; //массив, который вводит пользователь
string path; //путь к файлу
Finder(string path, string numbs) //конструктор открывает файл и создает входной массив
{
this->path = path;
int l = numbs.size();
vector<double> input;
for (int i = 0; i < l; i++)
{
string buffer = "";
if (numbs[i] != ' ')
{
buffer += numbs[i];
}
else
{
input.push_back(stod(buffer));
buffer = "";
}
}
this->input = input;
cout << "Initialization was successful" << endl;
}
void GetData() //да, загружать из файла в память обязательно
{
ifstream fin(path);
string line;
while (getline(fin, line))
{
int l = line.size();
string buffer = "";
vector<double> numbers;
for (int i = 0; i < l; i++)
{
if (line[i] != ' ')
{
buffer += line[i];
}
else
{
numbers.push_back(stod(buffer));
buffer = "";
}
}
this->lines.push_back(numbers);
}
fin.close();
cout << lines.size();
}
double GetDistance(vector<double> a) //расчет расстояним между точками
{
int l = this->input.size();
double sum = 0;
for (int i = 0; i < l; i++)
{
double el_i = this->input.at(i);
double el_a = a.at(i);
sum += pow((el_i - el_a), 2);
}
return sqrt(sum);
}
bool compareTo(vector<double> a, vector<double> b) //компаратор
{
return GetDistance(a) < GetDistance(b);
}
void ShowHeigbor() //для пользователя
{
using namespace std::placeholders; // for _1, _2, _3...
this->lines.sort(std::bind(&Finder::compareTo, this, _1, _2));
}
};
int main()
{
string inp;
cout << "Input vector: ";
cin >> inp;
Finder f{"data.txt", inp};
f.GetData();
//f.ShowHeigbor();
}