#ifndef CSTRING_VECTOR_H #define CSTRING_VECTOR_H #include #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include "cstring_utils.h" //#define _SCL_SECURE_NO_WARNINGS char const * DELIM { ", " }; /* динамический массив С-строк */ class cstring_vector { /* массив С-строк */ char ** data; /* логический размер (заполненность) */ size_t size; /* физический размер (ёмкость) */ size_t capacity; public: cstring_vector() { data = new char*[MIN_CAPACITY]; size = 0; capacity = MIN_CAPACITY; } cstring_vector(char ** cstr_array, size_t size) { init_from_cstr_array(cstr_array, size); } cstring_vector(char const ** cstr_array, size_t size) { init_from_cstr_array(const_cast(cstr_array), size); } cstring_vector(std::vectorcpp_strs) { this->size = cpp_strs.size(); this->capacity = size*CAPACITY_FACTOR; data = new char*[capacity]; for (auto const & s : cpp_strs) for (auto i = 0; i= size) throw std::out_of_range("idx is out of range"); return data[i]; } const char * operator [](int i) const //Менять можно только адреса и длину строк. Сами строки менять нельзя. { if (i < 0 || i >= size) throw std::out_of_range("idx is out of range"); const char * tmp = data[i]; return tmp; } /* размер массива */ size_t sz() { return size; } /* печать содержимого массива */ void print() const { assert(data); //assert(size <= capacity); std::cout << "{"; if (size) { for (size_t i = 0; i < size - 1; ++i) { print_cstring(data[i]); std::cout << DELIM; } print_cstring(data[size - 1]); } std::cout << "}"; } /* печать содержимого массива */ void println() const { print(); std::cout << std::endl; } void push_back(char * str) { if (size == capacity) reallocate(); data[size] = new char[strlen(str) + 1]; strcpy(data[size++], str); } //Добавляет копию С-строки в вектор /*void push_back(char * str) { if (size = capacity) reallocate(); data[size] = new char[strlen(str) + 1]; strcpy_s(data[size], strlen(str) + 1,str); ++size; }*/ operator std::vector () { std::vector t; for (auto i=0; isize = size; this->capacity = size*CAPACITY_FACTOR; data = new char* [capacity]; for (auto i = 0; i