Вопрос

Я использую PHP около 4 лет, однако столкнулся с проблемой, требующей чего-то с немного (:P) большей производительностью, и поэтому я выбрал C++.

Программа, которую я пишу, представляет собой демон Linux, который сканирует базу данных MySQL на наличие URL-адресов для загрузки, загружает их с помощью cURL, выполняет поиск указанной строки и затем соответствующим образом обновляет базу данных.Проблема, с которой я столкнулся, заключается в том, что я не знаю размера данных, которые необходимо сохранить в переменной для поиска определенной строки.

У меня возникла идея использовать связанный список и выделять больше узлов по мере заполнения списка данными.Это хороший способ делать что-то?

Заранее спасибо,

Это было полезно?

Решение

в c ++ векторный класс может хранить объем данных неизвестного размера.

#include <string>
#include <vector>

std::vector <std::string>Data;

std::string newData = "a String";
Data.push_back(newData);

std::string otherData = "a different String";
Data.push_back(otherData);

Конечно, 'string' может быть любой тип данных, который вы хотите, и вы можете получить доступ к данным, используя Data [0], чтобы вернуть первую строку, и вы можете использовать Data.size (), чтобы вернуть количество строк в вектор / массив.

for(int x = 0; x != Data.size(); x++)
{
   //Do what you want with the data here using Data[x]
}

Другие советы

Как правило, вы хотите использовать один из стандартных контейнеров. Мое личное предложение: std :: vector . Вы можете использовать его в качестве массива (так как данные гарантированно будут смежными), и он имеет удобные операции индексации и вставки (кажется, что вы не заинтересованы в удалении в данный момент).

В частности, вы можете настроить что-то вроде

std::vector<char> buff;
// while you are reading data
buff.push_back (item);

Когда вы закончите, вы можете вызвать buff.size , чтобы узнать, сколько вы прочитали.

В качестве дополнительного бонуса (если вы на самом деле имеете дело с буферами символов), когда вы, наконец, получите все необходимые данные, вы можете преобразовать их в std :: string , чтобы выполнить любой поиск, который вы хотите делать.

std::vector<char> buff;
buff.push_back('e');
buff.push_back('a');
buff.push_back('t');

std::string s(&buff[0], buff.size());

Отредактировано для корректности.

Там вам предстоит многое открыть.

Вам следует специально ориентировать свое открытие на STL:использовать Справочник по С++

Теперь вам следует попробовать научиться использовать:

  • std::vector
  • std::string
  • std::cin и std::cout (глобальные)

На std::string вы должны отметить большое количество алгоритмов, таких как find, find_first_of, find_last_of.

Обратите внимание, что манипуляции со строками в C++ могут быть довольно сложными (например, многословными).

Если вы знакомы с регулярными выражениями, возможно, вы захотите попробовать Boost.Регулярное выражение.Обратите внимание, что вам необходимо подключиться к его библиотеке.

Кроме того, если вы пришли с PHP и хотите повысить свою производительность, вы можете начать с множества разных языков сценариев (мой любимый — Python), и это, вероятно, будет проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top