C++ Builder 2009 — простой список целых чисел

Исходя из Java, я привык к встроенной структуре данных, на которую я могу быстро/легко ссылаться, что позволяет мне делать такие вещи, как добавление целых чисел в список и проверка, есть ли целое число в списке.

Поскольку это кажется распространенным явлением, я надеюсь увидеть, какой простой способ сделать это - С++ Builder. Я также согласен использовать стандартную библиотеку C++, если она будет работать с C++ Builder.


person James Oravec    schedule 07.02.2014    source источник
comment
Взгляните на все стандартные контейнеры: en.cppreference.com/w/cpp/container У каждого есть плюсы и минусы в зависимости от конкретной задачи. В вашем случае кажется, что вам нужен (мульти) набор или неупорядоченный_(мульти) набор. Стандартная библиотека должна работать с каждым компилятором C++.   -  person    schedule 07.02.2014
comment
Я забыл, поскольку вы, похоже, используете старый компилятор (2009 г.), те контейнеры, отмеченные C++11, будут вам недоступны, включая unordered_(multi)set.   -  person    schedule 07.02.2014


Ответы (2)


Вы можете использовать std::vector или std::set. Используйте vector, если вы хотите разрешить дубликаты, используйте set, если нет. Поиск vector также будет значительно медленнее по сравнению с set.

std::vector<int> intCheckList;
std::set<int> intCheckSet;
person therealrootuser    schedule 07.02.2014
comment
Меня втянули в проблему поддержки клиентов, но я посмотрю на это. Как только я проверю, я соглашусь, если это сработает. Спасибо - person James Oravec; 07.02.2014

Предложение mattingly890 сработало для меня, это просто продолжение, чтобы привести пример того, как я использовал набор, в качестве справочного материала для других. Ниже приведен пример кода того, как я вставил в набор и проверил, находится ли значение в наборе. Убедитесь, что #include <set> вверху.

// Test std set
std::set<int> myset;
std::set<int>::iterator it;
myset.insert(10);
myset.insert(20);
myset.insert(30);

it = myset.find(10);
boolean found = it!=myset.end();
if(found)
    MessageDlg("Found 10", mtInformation, TMsgDlgButtons() << mbOK, 0);

it = myset.find(15);
found = it!=myset.end();
if(found)
    MessageDlg("Found 15", mtInformation, TMsgDlgButtons() << mbOK, 0);

it = myset.find(20);
found = it!=myset.end();
if(found)
    MessageDlg("Found 20", mtInformation, TMsgDlgButtons() << mbOK, 0);

Использованная литература:

person James Oravec    schedule 07.02.2014
comment
boolean должно быть bool в С++, также есть set::count(), который вернет 0 или 1 вместо итератора, как find. Это избавило бы вас от теста против end(), и вы могли бы напрямую использовать его как условие if. - person ; 08.02.2014