我有一个大问题,我自己创建了链表和数据结构,但数据读取功能工作非常慢。如果我尝试读取10k结构,函数需要大约530ms:
List size: 10000
Time: 530
Delete success
Press any key to continue . . .
但是当我尝试读取10倍大的数据量(100k)时,大约需要44500毫秒:
List size: 100000
Time: 44512
Delete success
Press any key to continue . . .
这是我的代码:
IQ_struct.h
#ifndef IQ_sturct_H
#define IQ_struct_H
class IQ_struct {
public:
IQ_struct();
void setIQ(float, float);
float getIQ();
float getIQx();
float getIQy();
~IQ_struct();
private:
float newX;
float newY;
};
#endif
IQ_struct.cpp
#include "IQ_struct.h"
IQ_struct::IQ_struct(){
newX = 0;
newY = 0;
}
IQ_struct::~IQ_struct(){}
void IQ_struct::setIQ(float x, float y){
newX = x;
newY = y;
}
float IQ_struct::getIQx(){
return newX;
}
float IQ_struct::getIQy(){
return newY;
}
IQ_data.h
#include <string>
#include "IQ_struct.h";
#ifndef IQ_data_H
#define IQ_data_H
class IQ_data{
public:
IQ_data();
void AddData(float, float);
void Begin();
void Next();
bool End();
IQ_struct GetData();
void ReadFromFile(std::string,int);
int GetSize();
~IQ_data();
private:
typedef struct TNode{
IQ_struct data;
TNode *next;
}* nodePtr;
nodePtr head;
nodePtr curr;
nodePtr temp;
int size;
};
#endif
IQ_data.cpp
#include <cstdlib>
#include <string>
#include <iostream>
#include <fstream>
#include "IQ_data.h"
using namespace std;
IQ_data::IQ_data(){
head = NULL;
curr = NULL;
temp = NULL;
size = 0;
}
void IQ_data::AddData(float x, float y){
nodePtr n = new TNode;
n->next = NULL;
n->data.setIQ(x,y);
if(head != NULL){
curr = head;
while(curr->next != NULL){
curr = curr->next;
}
curr->next = n;
}else{
head = n;
}
}
void IQ_data::Begin(){
curr = head;
}
void IQ_data::Next(){
curr = curr->next;
}
bool IQ_data::End(){
return curr == NULL;
}
IQ_struct IQ_data::GetData(){
return curr->data;
}
void IQ_data::ReadFromFile(string fileName,int a){
float x,y;
fstream myfile(fileName, ios_base::in);
for(int k = 0; k < a; k++){
myfile >> x;
myfile >> y;
AddData(x,y);
size = size + 1;
}
myfile.close();
}
int IQ_data::GetSize(){
return size;
}
IQ_data::~IQ_data(){
while (head != NULL){
curr = head;
head = head->next;
delete curr;
}
delete temp;
delete head;
curr = NULL;
delete curr;
cout << "Delete success \n";
}
Main.cpp
#include <iostream>
#include <fstream>
#include <omp.h>
#include <time.h>
#include <cstdlib>
#include "IQ_data.h"
using namespace std;
int main(){
IQ_data listas;
clock_t init, fin;
init = clock();
listas.ReadFromFile("0.0013.txt",100000);
fin = clock() - init;
cout <<"List size: "<< listas.GetSize() << endl;
cout <<"Time: "<<fin<<endl;
return 0;
}
我做错了什么?主要问题是我的文件包含超过5000K的结构。提前感谢您的帮助:)
您要添加到列表的末尾,因此每次都需要遍历整个列表,随着列表变长,这需要更长的时间。
要么添加到列表的开头,要么保留一个指向最后一个元素的指针,以便可以快速插入。
问题内容: 我有一个包含一些元数据的文件,然后是包含2个带有标题的列的实际数据。在numpy中使用genfromtxt之前,是否需要将两种类型的数据分开?还是可以以某种方式拆分数据?将文件指针放在标题上方行的末尾,然后从那里尝试genfromtxt怎么办?谢谢该文件的格式如下所示: 问题答案: 如果您不希望第一行,请尝试(如果没有丢失的数据): 或(如果缺少数据): 如果然后要解析标头信息,则可以
我创建了一个方法,根据文件中的行号从文件中读取特定行。它对大多数文件都很好,但当我试图读取一个包含大量非常长的行的文件时,它需要很长时间,特别是当它在文件中的位置越来越深时。我还做了一些调试,似乎也占用了大量内存,但我不确定这是否可以改进。我知道还有一些其他的问题集中在如何从文件中读取某些行,但这个问题主要集中在性能方面。 如何优化此方法以使其比光速更快?
我正在尝试从com包中的CSV文件中读取值。实例但当我使用以下语法运行代码时: 上面写着: java.io.FileNotFoundException: Dataset.csv 我也尝试过使用: 仍然不工作。任何帮助都会很有帮助。谢谢
我有一个非常简单的问题:使用Python从txt文件中读取不同条目的最有效方法是什么? 假设我有一个文本文件,如下所示: 在C中,我会这样做: 用Python做这样的事情最好的方法是什么?以便将每个值存储到不同的变量中(因为我必须在整个代码中使用这些变量)。 提前感谢!
我正在尝试排序的键(优先数,int数)从最高到最低的链表,与数据从文本文件。我正在埋头插入项目并对它们进行排序。这是我的文本文件。 我的工作66 垃圾17 资金25 重要96 生命99 Moreutn 28 工作69 转让44 这是我的链表类 } 下面是我的节点类: 下面是我的数据类: 从链表类运行时的当前输出: 我的insert方法总是在第一个if语句处停止,而从不继续运行。我不知道怎么修好它。
我有一个java代码,我在其中读取了一个txt文件,然后迭代它,以便我可以将其填充到2d数组中。在我读取文件后,我能够打印出其内容,因此我确信该文件已被读取。并且我还确信bufferedreader库的. hasNextLine方法在找到一行时显示为true。但是当我在time循环中使用它时,它就像没有找到任何行一样,因此它没有迭代,因为我不知道我在表中有多少行。== 此外,当我硬编码行数以便检查