将文本文件读入动态一维数组的最有效方法是什么?在每次读取char之后重新分配似乎很愚蠢,在每个读取行之后重新分配似乎不太好.我想将整个文件读入数组.你会怎么做?
感谢C中的解决方案,现在我想使用std :: sort和vector在C++中实现这一点:
typedef struct
{
double x;
double y;
double alfa;
} pkt;
Run Code Online (Sandbox Code Playgroud)
vector< pkt > wektor;
使用push_back()填充; 比较功能:
int porownaj(const void *p_a, const void *p_b)
{
pkt *pkt_a = (pkt *) p_a;
pkt *pkt_b = (pkt *) p_b;
if (pkt_a->alfa > pkt_b->alfa) return 1;
if (pkt_a->alfa < pkt_b->alfa) return -1;
if (pkt_a->x > pkt_b->x) return 1;
if (pkt_a->x < pkt_b->x) return -1;
return 0;
}
sort(wektor.begin(), wektor.end(), porownaj); // this makes loads of errors …
Run Code Online (Sandbox Code Playgroud) 我有一个结构:
struct pkt_
{
double x;
double y;
double alfa;
double r_kw;
};
typedef struct pkt_ pkt;
Run Code Online (Sandbox Code Playgroud)
这些结构的表格:
pkt *tab_pkt;
tab_pkt = malloc(ilosc_pkt * sizeof(pkt));
Run Code Online (Sandbox Code Playgroud)
我想要做的是排序tab_pkt
的tab_pkt.alfa
和tab_pkt.r
:
qsort(tab_pkt, ilosc_pkt, sizeof(pkt), porownaj);
Run Code Online (Sandbox Code Playgroud)
porownaj是比较函数,但如何写呢?这是我的"草图":
int porownaj(const void *pkt_a, const void *pkt_b)
{
if (pkt_a.alfa > pkt_b.alfa && pkt_a.r_kw > pkt_b.r_kw) return 1;
if (pkt_a.alfa == pkt_b.alfa && pkt_a.r_kw == pkt_b.r_kw) return 0;
if (pkt_a.alfa < pkt_b.alfa && pkt_a.r_kw < pkt_b.r_kw) return -1;
}
Run Code Online (Sandbox Code Playgroud)