Как сделать массив int,string,double,double в какой нить один объект или...
Пишу программу глобального позиционирования, рисования ...(бесплатный проект!)
на данный момент пользуюсь для хранения обьектов в памяти кучу TStringList:
TStringList * MyObjectsX = new TStringList(); // координата Lat тип double
TStringList * MyObjectsY = new TStringList(); // координата Lon тип double
TStringList * MyObjectsType = new TStringList(); // название (вывожу на карту)
Естесственно приходится всё это дело постоянно преобразовывать
и огромный геморой добавить какую либо есчо фишку (те еще один стринг лист).
Сушествует ли способ собрать массив из неоднородных данных и представить его как симбольную переменную
предупреждаю размер массива должон быть ограничен только памятью
есть у кого предложения?
не понял, имеется ввиду библиотека Boost? (я так и не разобрался как её подключить а уж как пользоваться и подавно :( вот такой я долбень... да... знаю тока VCL, но если кто поможет....)
массив из неоднородных данных и представить его как симбольную переменную
Что значит представить массив как симбольную переменную? Строку что ли?
есть у кого предложения?
Variant и STL-контейнеры list или vector
Извиняйте, неправильно выразился, вот так:
MyObjects[0][1] // координата типа double
MyObjects[0][2] // координата типа double
MyObjects[0][3] // название тип String
MyObjects[n][0] // допустим идентификатор n-ного эл тип int
MyObjects[n][1] // координата типа double
MyObjects[n][2] // координата типа double
MyObjects[n][3] // название тип String
или вместо 0.1.2.3 - именнованные значения (что было б удобнее)
и вообще есть ли реализация типа Memory Table с функциями insert();delete();FiedByName(); ???
int id;
double lat;
double lon;
AnsiString name;
};
/**
* далее
**/
TMyObject * MyObjects = new TMyObject[_COUNT_];
using namespace std;
struct TItem
{
double X;
double Y;
AnsiString Name;
TItem() : X(0), Y(0) {}
TItem(double AX, double AY, AnsiString AName) : X(AX), Y(AY), Name(AName) {}
};
vector<TItem> Items;
Items.push_back(TItem(111,222, "Название 1"));
Items.push_back(TItem(333,444, "Название 2"));
// Доступ к элементу по индексу
Items[0].X - координата типа double
Items[0].Y - координата типа double
Items[0].Name - название тип String
и вообще есть ли реализация типа Memory Table с функциями insert();delete();FiedByName(); ???
Для доступа к элементу по наименованию можно использовать ассоциативный массив
map<AnsiString, TItem> MyMap;
MyMap["Name 1"].X = 111;
MyMap["Name 2"].Y = 444;
Можно и для vector<TItem> заюзать stl-фукцию find_if и находить Item по наименованию
а поиск только ручками?... перебором тоесь??
А что там подключать? хедеры инклюдишь и все. Шаблонная либа)
+ контейнер подходящий оттуда же или STL.
Можно конечно Variant как советуют исспользовать. Но это менее универсально. )
free() - не помог
delete - не хочет
free() - не помог
delete - не хочет
Попробуй не через вектор а DynamikArray <TItems> array;
-тож самое, только не выдаёт ошибку при закрытии проги.
Итоги:
Работает и vector и DynamicArray(честно справку по нему читал, но не догадался что в массив мона и структуру запихать)
vector начал выдаваать ошибку (точнее не он, а Thread)
видимо после подключения
using namespace std;
почему не помогло комментирование инклуда не знаю (может кто подскажет)
Итоги:
Работает и vector и DynamicArray(честно справку по нему читал, но не догадался что в массив мона и структуру запихать)
vector начал выдаваать ошибку (точнее не он, а Thread)
видимо после подключения
using namespace std;
почему не помогло комментирование инклуда не знаю (может кто подскажет)
отладчик тебе подскажет. у тебя происходит разрушение объекта и он удаляется дважды - в массиве и самостоятельно. читать литературу для ньюбов.
#include<vector>
...
struct to{
string clas;
int index;
string value;
}tok;
vector<to> tokens;
Ну а дальше ты можешь вставлять, удалять... изменять... вообщем все такое в этом духе...