尝试从源文件读取以将人员对象存储到容器中。
使用随机年龄,id和五个分类字符的类别向量初始化人员对象。
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);
}
};
用于使用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;
};
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;
}
19850319 33 A C E B D
06111990 28 B E C A D
答案 0 :(得分:1)
我想我看不出困难会在哪里。读入它们将是写出它们的镜像。如果您可以指望总是有五个,那么您基本上就是这样做:
sess = tf.Session()
c = tf.constant(2, dtype=tf.int32, shape=())
p = tf.placeholder_with_default(c, shape=())
with sess.as_default():
print(sess.run(p)) # 2
with sess.as_default():
print(p.op.run()) # None
如果在到达行末之前基本上是阅读类别的问题,那么将行读为字符串,将字符串推入字符串流,然后阅读字符直到行末可能是最简单的的字符串流:
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;
}
通常这不是最快的处理方式(创建字符串流有些慢),但是考虑到您正在处理I / O,解析速度只是很少考虑。