我将一个完整的文件读入一个字符串。这很快。 (例如180Mb文件 - 2s) 然后我使用>>从字符串中提取一些值。运算符并从中创建多个数组,并将数组插入到结构中,并将每个结构添加到向量中。
我正试图找到瓶颈,因为这很慢(但也许你什么都做不了)
是>>快速接近?
string str; // gets filled with the file
struct A;
std::vector<A> b; // global variables
// in the function inside the loop
str >> a.val
A a;
b.push_back(a);
向量是否取得a的所有权或是否复制了?还在堆栈上吗?我有大约60.000个结构插入到向量中。这是一种快速的方法还是更好的方法。
答案 0 :(得分:3)
问题是&gt;&gt;快速接近?
答案快速是相对的。你把它与什么比较?
问题该向量是否取得a的所有权或是否制作副本?
答案 std::vector::push_back()
制作输入对象的副本。
问题还在堆栈中吗?
回答仅根据发布的代码判断,是的,A
和b
都在堆栈中。
Queston 我有大约60,000个结构插入到向量中。这是一种快速的方法还是有更好的方法?
回答您可以通过创建具有所需大小的b
并将数据直接读入b
中的对象来获得一些性能。
std::vector<A> b(60000);
for ( i = 0; ; ++i /* Use whatever looping construct you can */ )
{
str >> b[i].val;
}
<强>更新强>
如果能够,以二进制形式编写和读取数据将是最快的。使用std::ostream::write()
写入数据,使用std::istream::read()
读取数据。
答案 1 :(得分:2)
C I / O通常比C ++ I / O更快。尝试使用fscanf()解析数据块(请参阅:http://www.cplusplus.com/reference/cstdio/fscanf/),您可能会发现C方法运行得更快。