#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
using namespace std;
auto fx = [](int x){
int r = 0;
switch(x % 3)
{
case 0:
r = x * x;
break;
case 1:
r = x;
break;
default:
r = x / 3;
break;
}
return r;
};
auto calculate = [](const vector<int>& vx, auto fx){
vector<int> calcValues(vx.size());
transform(vx.begin(), vx.end(), calcValues.begin(), fx);
return calcValues;
};
int main()
{
cout << "Введи кол-во чисел: ";
int n = 0;
cin >> n;
cout << "Введи через пробел " << n << " натуральных чисел:\n" << "$: ";
vector<int> values(n);
copy_n(istream_iterator<int>(cin), n, values.begin());
cout << "Результат твоих расчетов:\n";
copy_n(calculate(values, fx).begin(), n, ostream_iterator<int>(cout, "\n"));
}
Даны натуральные числа
Почему printf не выводит переменные?
printf("%s", "Znachenie", &p);
printf("%s %f", "Znachenie", p);
printf("Znachenie %f", p);
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
size_t n = 4;
string s = "42 54 35 76";
istringstream is(s);
vector<int> v;
copy_n(istream_iterator<int>(is), n, back_inserter(v));
/*******
** vector<int> v2(n);
** copy_n(istream_iterator<int>(is), n, v.begin());
*******/
copy_n(v.begin(), n, ostream_iterator<int>(cout, " "));
}
struct Data { short id; double val; };
я понимаю что 32 00 11 49 - это интовское значение
Как в данном выводе понять где выравнивание происходит?
Можно помочь с ответом, а не включать своё остроумие, подсказка небольшая.
#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<memory>
#include<sstream>
#include<Windows.h>
using namespace std;
enum class spType {ALL, SP, TH};
class Policlinic
{
public:
Policlinic();
~Policlinic();
// ...
void addSpecialists(const string& s);
void addTherapists(const string& s);
void printPersonnel(spType = spType::ALL);
// ...
// Геттеры Сеттеры сам по шаблону
// ...
private:
struct Personnel;
unique_ptr<Personnel> m_personnel;
string desk;
string type;
unsigned pharmacy = 0;
friend istream& operator>>(istream& is, vector<string>& values);
friend ostream& operator<<(ostream& os, const vector<string>& values);
};
struct Policlinic::Personnel
{
vector<string> specialists;
vector<string> therapists;
};
Policlinic::Policlinic() : m_personnel(make_unique<Personnel>())
{
}
Policlinic::~Policlinic()
{
}
istream& operator>>(istream& is, vector<string>& values)
{
copy(istream_iterator<string>{is}, {}, back_inserter(values));
return is;
}
ostream& operator<<(ostream& os, const vector<string>& values)
{
copy(values.begin(), values.end(), ostream_iterator<string>{os, "\n"});
return os;
}
void Policlinic::addSpecialists(const string& s)
{
istringstream is(s);
is >> m_personnel->specialists;
}
void Policlinic::addTherapists(const string& s)
{
istringstream is(s);
is >> m_personnel->therapists;
}
void Policlinic::printPersonnel(spType stype)
{
switch(stype)
{
case spType::SP:
cout << "Специалисты:\n"
<< m_personnel->specialists;
break;
case spType::TH:
cout << "Терапевты:\n"
<< m_personnel->therapists;
break;
default:
cout << "[Весь персонал]\n";
printPersonnel(spType::SP);
printPersonnel(spType::TH);
break;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "ru");
Policlinic ply;
// Для простоты
string value;
cout << "Введите врачей специалистов через пробел \n$: ";
getline(cin, value);
ply.addSpecialists(value);
cout << "\nВведите врачей терапевтов через пробел\n$: ";
getline(cin, value);
ply.addTherapists(value);
ply.printPersonnel(spType::ALL);
system("pause");
}
У меня при вводе ограничивается ввод до 5-ти символов, а я хочу ввести любое число, любого количества
#include<iterator>
#include<iostream>
#include<algorithm>
#include<memory>
using namespace std;
class Decmal
{
public:
explicit Decmal(size_t size = 5);
Decmal(const Decmal&);
size_t get_size() const
{
return size;
}
// ...
private:
size_t size;
unique_ptr<char> data;
// ...
private:
void resize(size_t sz);
friend istream& operator>>(istream& is, Decmal& dec);
friend ostream& operator<<(ostream& os, const Decmal& dec);
};
Decmal::Decmal(size_t size) : size{ size }, data(new char[size])
{
fill_n(data.get(), size, '0');
}
Decmal::Decmal(const Decmal& rh)
{
size = rh.size;
data.reset(new char[size]);
copy_n(rh.data.get(), size, data.get());
}
void Decmal::resize(size_t new_size)
{
if(size < new_size)
{
data.reset(new char[new_size]);
size = new_size;
}
}
istream& operator>>(istream& is, Decmal& dec)
{
is.putback(is.get());
size_t new_size = static_cast<size_t>(is.rdbuf()->in_avail() - 1);
dec.resize(new_size);
copy_n(istream_iterator<char>{is}, dec.size, dec.data.get());
return is;
}
ostream& operator<<(ostream& os, const Decmal& dec)
{
copy_n(dec.data.get(), dec.size, ostream_iterator<char>{os});
return os;
}
int main()
{
Decmal x;
cin >> x;
cout << x.get_size() << " " << x << endl;
system("pause");
}
Не совсем понял принцип работы этого кода.
#include<iterator>
#include<iostream>
#include<algorithm>
using namespace std;
class Decmal
{
public:
explicit Decmal(size_t size = 5);
Decmal(const Decmal&);
~Decmal(){ delete[] data; }
size_t get_size() const
{
return size;
}
// ...
private:
size_t size;
unsigned char* data = nullptr;
// ...
private:
void resize(size_t sz);
friend istream& operator>>(istream& is, Decmal& dec);
friend ostream& operator<<(ostream& os, const Decmal& dec);
};
Decmal::Decmal(size_t size) : size{ size }, data(new unsigned char[size])
{
fill_n(data, size, '0');
}
Decmal::Decmal(const Decmal& rh)
{
size = rh.size;
delete[] data;
data = new unsigned char[size];
copy_n(rh.data, size, data);
}
void Decmal::resize(size_t new_size)
{
if(size < new_size)
{
delete[] data;
data = new unsigned char[new_size];
size = new_size;
}
}
istream& operator>>(istream& is, Decmal& dec)
{
char c = 0;
size_t sz = 0;
while(is.read(&c, 1) && c != '\n') // \n == 10 \r == 13
{
if(sz == dec.size)
{
unsigned char* tmp = new unsigned char[sz + 1];
copy_n(dec.data, dec.size, tmp);
dec.resize(sz + 1);
copy_n(tmp, dec.size, dec.data);
delete[] tmp;
}
dec.data[sz] = c;
++sz;
}
return is;
}
ostream & operator<<(ostream& os, const Decmal& dec)
{
copy_n(dec.data, dec.size, ostream_iterator<char>{os});
return os;
}
int main()
{
Decmal x;
cin >> x;
cout << x.get_size() << " " << x << "\n";
Decmal y = x;
cout << y << endl;
system("pause");
}
Если я правильно делаю
print(some_values[-1])
double x = 12.3456789;
double y = 98.7654321;
QString str = QString("x: %1 y: %2").arg(x, 0, 'f', 3).arg(y, 0, 'f', 3);
OUT:
x: 12.346 y: 98.765
Задаю такой вопрос ибо не нашёл универсального решения
#include<iostream>
#include<cstdlib>
int main()
{
system(" "); // пробел важен
std::cout << "\x1b[31m" << "Hello user!";
std::cin.get();
}
a = A(2);
// Это "интерфейс", который представляет собой набор операций, которые можно произвести над объектом
// В данном случае, по объекту можно постучать
class IKnockable {
public:
virtual ~IKnockable() = 0;
// Само по себе действие: "постучать"
virtual void knock() const = 0;
};
// Реализация интерфейса классом Door
class Door : public IKnockable {
public:
// ...
void knock() const override { std::cout << "door" << std::endl; }
// ...
};
// Реализация интерфейса классом Window
class Window : public IKnockable {
public:
// ...
void knock() const override { std::cout << "window" << std::endl; }
// ...
};
// ...
// Какая-то функция, которая может постучать по каждому объекту из списка,
// не имея представления о том, что же это за объект
void knock(const std::vector<std::shared_ptr<IKnockable>> &knockableObjects) {
for (auto &&knockableObject : knockableObjects) {
knockableObject->knock();
}
}
// ...
std::vector<std::shared_ptr<IKnockable>> v = {std::make_shared<Door>(), std::make_shared<Window>()};
knock(v); // Сначала напечатает "door", потом напечатает "window"
#include <stdio.h>
#include <string.h>
#include <pcre.h>
#define DATE_SIZE 11
int main(int argc, char* argv[]) {
pcre *pattern;
const char *error_str;
int error_offset;
int matches[1];
pattern = pcre_compile("^\\d{2}\\.\\d{2}\\.\\d{4}$", 0, &error_str, &error_offset, NULL);
if(pattern == NULL) {
printf("Could not compile: %s\n", error_str);
return 1;
}
char str[DATE_SIZE];
fgets(str, DATE_SIZE, stdin);
int r = pcre_exec(pattern, NULL, str, strlen(str), 0, 0, matches, 1);
pcre_free(pattern);
if (r < 0)
puts("Invalid date");
else
puts("Valid date");
return EXIT_SUCCESS;
}