Я пытаюсь найти разницу в моем коде при использовании std :: find.Проблема с функцией поиска в C++
Для моего тестового кода. Я сделал вектор под названием Test
std::vector<const char*> Test;
Для проверки функции поиска, я заполнил вектор теста с фиктивными данными, с помощью push_back функции
Test.push_back("F_S");
Test.push_back("FC");
Test.push_back("ID");
Test.push_back("CD");
Test.push_back("CT");
Test.push_back("DS");
Test.push_back("CR");
Test.push_back("5K_2");
Test.push_back("10K_5");
Test.push_back("10K_1");
Test.push_back("10K_2");
Test.push_back("10K_3");
Test.push_back("10K_4");
Test.push_back("10K_5");
То, что я хочу сделать с функцией поиска, чтобы перейти через Тест и посмотреть, есть ли какие-либо повторяющиеся данные. В первый раз, когда вы столкнетесь с данными, я сохраню его в векторе Unique_Data.
std::vector<const char*> Unique_Data;
Таким образом, для 14 точек данных, указанных выше, будет сохранено только 13, поскольку 10K_5 повторяется.
Кодекс Я использую выглядит следующим образом
for(int i = 0; i < Test.size(); i++)
{
if(Unique_Data.empty())
{
Unique_Data.push_back(Test[i]);
}
else if (std::find(Unique_Data.begin(), Unique_Data.end(), Test[i]) != Unique_Data.end())
{
// Move on to next index
}
else
{
Unique_Data.push_back(Test[i]);
}
}
Проблема, которую я имею, когда я использую фиктивные данные. Я получаю правильный ответ для Unique_Data.
Однако, если я сохраняю фактические данные в векторе теста, которые сохраняются в связанном списке. Я понимаю, что все они уникальны.
код выглядит следующим образом
p_curr = List.p_root;
while(p_curr != NULL)
{
// id starts from 0
if(atoi(p_curr->id) == 14) break;
Test.push_back(p_curr->Descriptor);
p_curr = p_curr->p_next;
}
я тестировал с теми же 14 данных. Это все типы const char *. Однако, когда я использовал данные связанного списка. Функция find считает, что все данные уникальны.
Может ли кто-нибудь сказать мне, что в этом плохого?
Вы бы сделать вашу себя пользу, используя 'зЬй :: string' вместо' сопзЬ символ * '. Поскольку 'const char *' сравниваются по значению указателя, а не к тексту, который они могут содержать. – hetepeperfan