在设计方面:重载vector类型的类成员的插入运算符
in terms of design: overloading the insertion operator for a class member of type vector
尝试从源文件中读取,以将person对象存储到容器中。
person对象是用一个随机的年龄、id和一个由五个分类字符组成的类别向量初始化的。
个人.hpp
class person
{
protected :
int age; // 0 - 99
int id; // 20181104 eight numeric characters
std::vector<char> categories = {'A', 'B', 'C', 'D', 'E'}
person()
{
...
std::shuffle(categories.begin(), categories.end(),
random_generator::instance().gen);
}
};
随机生成器.hpp
用于用std::shuffle 打乱个人类成员类别
class random_generator
{
public :
static random_generator& instance()
{
static random_generator instance;
return instance;
}
random_generator(random_generator const&) = delete;
random_generator& operator=(random_generator const&) = delete;
private :
random_generator(){}
std::random_device rd;
std::mt19937 gen{rd()};
...
friend class person;
};
个人.cpp
std::ostream& operator<<(std::ostream& output, const person& p)
{
output << p.id << ' ' << p.age;
for(char c : p.categories)
output << c << ' ';
return output;
}
std::istream& operator>>(std::istream& input, person& p)
{
input >> p.id >> p.age;
// how can I implement this; suggested alternatives are most welcome
return input;
}
person.txt源文件
19850319 33 A C E B D
06111990 28 B E C A D
我想我不知道困难在哪里。把它们读进去就像把它们写出来一样。如果你可以指望总是有五个,那么你基本上只需要做这样的事情:
std::istream& operator>>(std::istream& input, person& p)
{
input >> p.id >> p.age;
p.categories.clear();
for (int i=0; i<5; i++) {
char ch;
input >> ch;
p.categories.push_back(ch);
}
return input;
}
如果基本上是读取类别直到到达行的末尾,那么将行读取为字符串,将字符串推入字符串流,然后读取字符直到到达字符串流的末尾可能是最简单的:
while (input >> ch)
p.categories.push_back(ch);
这通常不是最快的方法(创建字符串流有点慢(,但考虑到您正在处理I/O,解析速度很少被考虑。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何将结构插入到集合中并打印集合的成员
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 在设计方面:重载vector类型的类成员的插入运算符
- "<某些系统标头>:错误:"<在此处插入函数>"在移动源文件后不是"std"的成员
- SegFault将插入std :: vector的成员函数插入std :: vector
- 如何实现自动插入隐含占位符的 easy_bind()?*带成员指针*
- 从 Vector 的元素成员方法插入矢量元素会破坏 *this
- 插入迭代器与容器的成员函数插入器
- C++:如何将数据插入到结构成员(位于 Vector 中的结构)
- 如何通过流插入运算符调用成员函数
- 如何在映射中插入成员函数指针
- 如何使用输入流重载将项插入类中的映射成员
- iostream插入器和提取器可以是类成员而不是全局重载吗?
- 为什么映射插入会更改对象成员值