#c #vector #filter
#c #вектор #Фильтр
Вопрос:
Эй, так что в настоящее время я читаю имена всех файлов .txt в папке и добавляю их в « vectorlt;stringgt; TxtFiles
«.
Я хочу, чтобы эти имена файлов отображались внутри фильтра, чтобы вы могли искать имя файла.
Вот пример для фильтра в ImGui:
static ImGuiTextFilter filter; filter.Draw(); const char* Filterlist[] = { "1: Word1", "2: Word2", "3: Word3", "4: Word4", "5: Word5", }; for (int i = 0; i lt; IM_ARRAYSIZE(Filterlist); i ) if (filter.PassFilter(Filterlist[i])) ImGui::Text("%s", Filterlist[i]);
Это очень хорошо работает с использованием «const char*» и предопределенного списка. Но поскольку я читаю имена файлов во время выполнения и не хочу предопределять их, я использую « vectorlt;stringgt; TxtList
» для « TxtList.push_back(TxtFileName);
»
Я попытался просто изменить код выше на этот:
static ImGuiTextFilter filter; filter.Draw(); for (int i = 0; i lt; IM_ARRAYSIZE(TxtList); i ) if (filter.PassFilter(TxtList[i])) ImGui::Text("%s", TxtList[i]);
Но для «IM_ARRAYSIZE» это дает мне следующее сообщение об ошибке:
«ни один оператор» * » не соответствует этим операндам, типы операндов: * std::векторlt;std::строка, std::распределительstd::строкаgt;»
Также «TxtList[i]» за «фильтром.Фильтр доступа(..» выдает мне ошибку:
не существует подходящей функции преобразования из «std::string» в «const char»
Как мне изменить код здесь, чтобы фильтр работал с векторным списком TXT?
Ответ №1:
Ну, я не знаю, что IM_ARRAYSIZE
содержит макросы, но , вероятно, это что-то вроде этого: sizeof(array) / sizeof(*array)
, но поскольку вы переключились на векторы, вы можете использовать vector.size()
.
Чтобы исправить вторую проблему, вам , вероятно, нужно добавить .c_str()
после TxtList[i]
, чтобы преобразовать std::string
в const char*
Комментарии:
1. IM_ARRAYSIZE взят из официального репозитория imgui в imgui.h и выглядит так: «#определите IM_ARRAYSIZE(_ARR) ((int)(размер(_ARR) / размер(*_ARR))) / / Размер статического массива в стиле C. Не используйте указатели!»
2. Хорошо, спасибо, поэтому TxtList.size(); исправлена первая ошибка, спасибо. Ты знаешь, как я мог бы починить вторую?
3. Да, «.size()», а не «.length()», «.length()» для строк, извините за это.
4. .c_str() также исправил вторую проблему, большое спасибо