我已经使用 PHP 大约 4 年了,但是我遇到了一个需要稍微 (:P) 更好的性能的问题,所以我选择了 C++。
我正在编写的程序是一个 Linux 守护程序,它将扫描 MySQL 数据库以加载 URL,使用 cURL 加载它们,搜索指定的字符串,然后相应地更新数据库。我面临的问题是我不知道需要存储在变量中以便搜索特定字符串的数据的大小。
我有使用链表并在数据填充列表时分配更多节点的想法。这是做事的好方法吗?
提前致谢,
我已经使用 PHP 大约 4 年了,但是我遇到了一个需要稍微 (:P) 更好的性能的问题,所以我选择了 C++。
我正在编写的程序是一个 Linux 守护程序,它将扫描 MySQL 数据库以加载 URL,使用 cURL 加载它们,搜索指定的字符串,然后相应地更新数据库。我面临的问题是我不知道需要存储在变量中以便搜索特定字符串的数据的大小。
我有使用链表并在数据填充列表时分配更多节点的想法。这是做事的好方法吗?
提前致谢,
在 C++ 中,vector 类可以存储未知大小的数据量。
#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
来了解你读了多少。
作为额外的奖励(如果您实际上正在处理字符缓冲区),当您最终获得所需的所有数据时,您可以转换为 astd::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:使用C++ 参考
现在你应该尝试学习如何使用:
std::vector
std::string
std::cin
和std::cout
(全局变量)std::string
你应该注意很多算法,如find
, find_first_of
, 。find_last_of
请注意,C++ 中的字符串操作可能非常具有挑战性(如冗长)。
如果您对正则表达式感到满意,您可能愿意尝试Boost.Regex。请注意,您必须链接到它的库。
此外,如果您来自 PHP 并希望提高性能,您可以从许多不同的脚本语言开始(Python 是我最喜欢的),这可能会更容易。