我已经使用PHP大约4年了,但是我遇到了一个问题需要稍微((P)更好的性能,所以我选择了C ++。
我正在编写的程序是一个Linux守护程序,它将扫描MySQL数据库以获取要加载的URL,使用cURL加载它们,搜索指定的字符串,然后相应地更新数据库。我面临的问题是,我不知道需要存储在变量中的数据大小,以便搜索特定的字符串。
我想到了使用链表并在数据填充列表时分配更多节点。这是一个做事的好方法吗?
提前致谢,
答案 0 :(得分:6)
在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]
}
答案 1 :(得分:2)
通常,您可能希望使用其中一个标准容器。我个人的建议是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());
编辑正确。
答案 2 :(得分:1)
你可以在那里发现很多东西。
您应该专门将发现定位到STL:使用C++ reference
现在你应该尝试学习如何使用:
std::vector
std::string
std::cin
和std::cout
(全局)在std::string
上,你应该注意到很多算法,例如find
,find_first_of
,find_last_of
。
请注意,C ++中的字符串操作非常具有挑战性(如详细说明)。
如果您对正则表达式感到满意,则可能愿意尝试Boost.Regex。请注意,您必须链接到其库。
另外,如果你来自PHP并希望提高性能,你可以从许多不同的脚本语言开始(Python是我最喜欢的),它可能会更容易。