Контейнеры STL против структур

#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 — это.