动态deque中的C++元素
C++ Elements in dynamic deque
我在从文本文件向deque添加元素时遇到问题。文件包含数字,例如:1 2 3 4。但当我试图从文件中提取数字时,deque会多填充一个数字。
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
using namespace std;
int temp;
int br = 1;
struct delem
{
int key;
delem *next;
} *l = NULL, *r = NULL;
void push_l(int n)
{
delem *p;
p = l;
l = new delem;
l->key = n;
l->next = p;
if (r == NULL)
{
r = l;
}
}
void push_r(int n)
{
delem *p;
p = r;
r = new delem;
r->key = n;
r->next = NULL;
if (l == NULL)
{
l = r;
}
else
p->next = r;
}
int pop_l(int &n)
{
delem *p;
if (l)
{
n = l->key;
p = l;
l = l->next;
if (l== NULL)
r = NULL;
delete p;
return 1;
}
else
return 0;
}
int pop_r(int &n)
{
delem *p;
if (r)
{
n = r->key;
if (l == r)
{
delete r;
l = r = NULL;
}
else
{
p = l;
while (p->next != r)
p = p->next;
//p++;
n = r->key;
p->next = NULL;
delete r;
r = p;
return 1;
}
}
else
return 0;
}
void get(int n)
{
int i, t;
for (i = 1; i < br; i++)
{
pop_l(t);
if (i == n)
{
temp = t;
}
push_r(t);
}
}
void print_deque()
{
for (int i = 1; i<br; i++)
{
get(i);
cout << temp << " ";
}
}
void find_number()
{
int n;
int total = 0;
int count = 0;
double average = 0;
ifstream deque_file;
deque_file.open("deque.txt", ios::in);
if (deque_file)
{
while (!deque_file.eof())
{
deque_file >> n;
push_l(n);
}
while(pop_l(n))
{
total+=n;
count++;
}
average = total/count;
cout<<"nnSum: " << total << " Count: " << count << " Average: " << average << endl << endl;
}
else
cout << "Error while opening input file!" << endl;
deque_file.close();
}
int main()
{
int ch;
ifstream fd;
fd.open("deque.txt", ios::in);
while (fd)
{
fd >> ch;
push_r(ch);
br++;
}
print_deque();
find_number();
system("pause");
return 0;
}
如何避免最后一个数字加两次?
不要执行while (fd)
(或while (!fd.eof())
)。
而是执行while (fd >> ch)
。
原因是eofbit
标志直到您第一次尝试从文件末尾以外读取时才被设置,从而导致循环一次对多次迭代。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素