-
Автор темы
- #1
Все привет, делаю сохранение массива std::vector<std::string> и двух мерного std::vector<std::vector<Vector3>>.
Хочу понять как правильно его сохранять, т.к. у него размер динамический.
Сделал костыльно, но не нравится, то что в кфг хранятся 2 лишние переменные.
Пожалуйста помогите
Хочу понять как правильно его сохранять, т.к. у него размер динамический.
Сделал костыльно, но не нравится, то что в кфг хранятся 2 лишние переменные.
Пожалуйста помогите
C++:
static void from_json(const json& j, stConfig::stRecord& r)
{
read(j, "bAutoRun", r.bAutoRun);
read(j, "fDistBetween", r.fDistBetween);
read(j, "iType", r.iType);
read(j, "iItemsRecord[size]", r.iItemsRecord);
r.sItemsRecord.resize(r.iItemsRecord); //увеличиваю размер массива std::vector<std::string>
r.vRecord.resize(r.iItemsRecord); //увеличиваю двух мерный массив по 1 значению std::vector
for (size_t i = 0; i < r.iItemsRecord; ++i) { //r.iItemsRecord размер массива std::vector<std::string>
read(j, ("Route[" + std::to_string(i) + "]").c_str(), r.sItemsRecord[i]);
read(j, ("iRecord[" + r.sItemsRecord[i] + "]").c_str(), r.iRecord[i]); //читаю 2 размер двух мерного массив std::vector<std::vector>
}
for (size_t i = 0; i < r.iItemsRecord; ++i) { //r.iItemsRecord размер массива std::vector<std::string>
r.vRecord[i].resize(r.iRecord[i]); //Увеличиваю 2 мерный массив 2 значение std::vector<std::vector>
for (size_t k = 0; k < r.iRecord[i]; ++k) { // в массиве r.iRecord[i] 2е значение для 2 мерного массива
read(j, ("Name[" + r.sItemsRecord[i] + "] " + "Point[" + std::to_string(k) + "]").c_str(), r.vRecord[i][k]);
}
}
}
C++:
static void to_json(json& j, const stConfig::stRecord& o/*const stConfig::stRecord& dummy = {}*/)
{
WRITE_D("bAutoRun", bAutoRun);
WRITE_D("fDistBetween", fDistBetween);
WRITE_D("iType", iType);
WRITE_D("iItemsRecord[size]", iItemsRecord); //Сохраняю размер std::vector<std::string>
for (size_t i = 0; i < o.sItemsRecord.size(); ++i) {
WRITE_D(("Route[" + std::to_string(i) + "]").c_str(), sItemsRecord[i]);
WRITE_D(("iRecord[" + o.sItemsRecord[i] + "]").c_str(), iRecord[i]); //Сохраняю размер std::vector<std::vector<>>
}
for (size_t i = 0; i < o.sItemsRecord.size(); ++i) {
for (size_t k = 0; k < o.vRecord[i].size(); ++k) {
WRITE_D(("Name[" + o.sItemsRecord[i] + "] " + "Point[" + std::to_string(k) + "]").c_str(), vRecord[i][k]); //Тут уже сам двух мерный массив Vector3 сохраняется
}
}
}