C/C++

Как проинициализировать std::vector используя указатель на базовый массив?

Вопрос по c++
Vladimir Sidorenko
Vladimir Sidorenko
878
vector <тип> название вектора (указатель на начало базового массива, указатель на конец базового массива)
RC
R. C
51 416
Лучший ответ
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 примерно так, но я рассматривал ситуацию когда массив распался на указатель и не имеет данных о размере