#c #struct #stl
#c #структура #stl
Вопрос:
Я хотел бы знать, что лучше использовать и почему:
Раньше я создавал типы с помощью контейнеров STL, но недавно я обнаружил, что API используют типы, подобные структурам, что, я думаю, связано с использованием C вместо C , но я хочу знать, что лучше с точки зрения производительности и памяти.
Перед:
typedef std::tuple<std::string, int, int, bool> SomeType;
Теперь:
typedef struct tagSomeType { std::string sVar; int iVar, iVar2; bool bVar; } SomeType;
Спасибо
[РЕДАКТИРОВАТЬ] Я привел этот пример кортежа, чтобы сделать его видимым, но, например
typedef std::pair<int, int> iCoord; /* VS */ struct iCoord{int x, y;};
Кажется, единственное отличие заключается в том, что struct обладает большей удобочитаемостью, чем STL Container
Комментарии:
1. Это действительно зависит от вариантов использования, от дизайна, от доступности, например
std::tuple
(в конце концов, это тип C 11) и многое другое.2. Также помните, что в C вам не нужно использовать
typedef
for структуры или классы. Имя тега структуры или класса — это имя типа.3. Структуры гораздо более выразительны и понятны. Кортежи очень полезны в каркасах шаблонов, но не очень удобны в
API
.4. Ваш вопрос, похоже, касается
struct
, аtuple
неSTL
контейнеров.5.
std::pair
не являетсяSTL
контейнером.
Ответ №1:
Существенной разницы в использовании памяти и производительности нет. Так что главным критерием должна быть читабельность.
Одно из отличий заключается в том, что в a struct
у каждого элемента есть имя, чего нет для tuple
s . Особенно, если у вас больше 2 или 3 элементов, это может сделать структуры более удобочитаемыми.
Кстати, ваше объявление структуры выполнено в стиле C. В C вы можете написать это следующим образом:
struct SomeType { std::string sVar; int iVar, iVar2; bool bVar; };
Ответ №2:
На этот вопрос нет однозначного ответа, и это зависит от вашей ситуации. Мое собственное мнение таково, что если у вас более двух переменных, вам следует использовать struct , если у вас нет веских причин не делать этого. В struct вы можете давать имена своим переменным, так что вам не нужно запоминать, что число 1 — это это, а число 2 — это.