C/C++
Как проинициализировать std::vector используя указатель на базовый массив?
Вопрос по c++
vector <тип> название вектора (указатель на начало базового массива, указатель на конец базового массива)
Vladimir Sidorenko
спасибо
#include
#include
#include
using namespace std;
struct Shape {
virtual const char* name()const = 0;
virtual double area()const = 0;
virtual double perimeter()const = 0;
protected:
inline static const auto pi = 3.141592653589793;
};
class Circle : virtual public Shape {
public:
Circle()
: r (0) {}
explicit Circle(const double r)
: r(r) {}
const char* name()const override {
return "circle";
}
double area()const override {
return pi * r * r;
}
double perimeter()const override {
return 2.0 * pi * r;
}
private:
double r;
};
class Rectangle : virtual public Shape {
public:
Rectangle()
: a(0), b(0) {}
Rectangle(const double a, const double b)
: a(a), b(b) {}
const char* name()const override {
return "rectangle";
}
double area()const override {
return a * b;
}
double perimeter()const override {
return 2.0 * (a + b);
}
private:
double a;
double b;
};
class Triangle : virtual public Shape {
public:
Triangle()
: a(0), b(0), c(0) {}
Triangle(const double a, const double b, const double c)
: a(a), b(b), c(c) {}
const char* name()const override {
return "triangle";
}
double area()const override {
auto p = perimeter() / 2.0;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
double perimeter()const override {
return a + b + c;
}
private:
double a;
double b;
double c;
};
int main() {
Triangle ta{ 2.5, 3.7, 2.9 };
Circle ca{ 1.85 };
Rectangle ra{ 2.9, 4.8 };
Triangle tb{ 3.2, 4.1, 2.5 };
Circle cb{ 2.12 };
Rectangle rb{ 4.85, 6.4 };
vector shapes{ &ta, &ca, &ra, &tb, &cb, &rb };
for (const auto& shape : shapes) {
cout
Vladimir Sidorenko
примерно так, но я рассматривал ситуацию когда массив распался на указатель и не имеет данных о размере
Похожие вопросы
- С++ Не работает двумерный вектор (std::vector)
- Написать программу на С++ с применением одномерных массивов, используя указатели.
- Почему никто из программистов никогда не пишет using namespace std;? Все пишут например вот так:std::vector<int> v1(10);
- Как научиться использовать указатели?
- Создат код с помощью массивов и указателей. с++
- Указатель, массив, bool
- Динамический массив и указатель Си
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- Указатель превращается в двумерный массив. (Си)
- Инкрементировать строки массива указателей. (Си)