我正在尝试创建一个向量,其中填充了“blokus tiles”文件的每个字符串行的大小值。 (尺寸为5x5的周期或星星的瓷砖)。该文件作为字符串向量的向量读入,
vector <std::string> tile
vector <vector<string>> alltiles
我正在尝试将值迭代到一个存储tile字符串大小(每行)的向量中。如果每条线的长度不同,或者每条线的长度不正确,或者除了星号(*)或句点(。)之外还有其他字符,我这样做是为了稍后输出错误。我这样做是为了在文件blokusstatus.txt(作为命令行参数输入)中打印tile的大小,
if (infile.is_open()) {
while (std::getline(infile, tileline)) {
int actualtilesize = tileline.length();
cout << actualtilesize << std::endl;
tile.push_back(tileline);
alltiles.push_back(tile);
}
}
infile.close();
//print out the contents of the file
std::ofstream outfile;
outfile.open(arginfile);
for (auto e: tile) {
cout << e << std::endl;
}
结果如下:
ec327@ec327-VirtualBox:~$ ./w5blokus2 5 blokusstatus.txt
5
5
5
5
5
0
5
5
5
5
5
0
5
5
5
5
5
.....
.*...
**...
*....
*....
.....
.....
**...
*....
**...
.....
.....
*....
***..
*....
这看起来不错。但是,我尝试以这种方式将数字列表转换为向量:
if (infile.is_open()) { //infile is open only if 3 or 4 arguments
int i = 0;
while (std::getline(infile, tileline)) {
for (int i=0; i <= tileline.end(); i++) {
vector <int> sizenums;
sizenums[i] = tileline.length();
i++;
cout << sizenums << std::endl;
}
//cout << actualtilesize << std::endl;
}
tile.push_back(tileline);
alltiles.push_back(tile);
}
infile.close();
std::ofstream outfile;
outfile.open(arginfile);
for (auto e: tile) {
cout << e << std::endl;
}
编译时会出现相当长的错误,包括
^ ~~~~~~~ / usr / include / c ++ / 6 / ostream:497:5:注意:模板参数 /替换失败:
w5blokus3.cpp:80:15:注意:推导出参数的冲突类型 '_CharT'('char'和'std :: vector') cout&lt;&lt; sizenums&lt;&lt;的std :: ENDL;&#34;
w5blokus3.cpp:80:15:注意:无法转换'sizenums'(类型 'std :: vector')输入'char'
cout&lt;&lt; sizenums&lt;&lt;的std :: ENDL;
我不知道出了什么问题。我是新手,感谢任何帮助或提示。
答案 0 :(得分:0)
有两件事,你需要迭代向量来打印出它的内容而你不能使用 @Entity
@Table(name = "persona")
@Inheritance(strategy = InheritanceType.JOINED)
@DynamicUpdate
@SelectBeforeUpdate(value = false)
@SelectBeforeUpdate(value = false)
@NamedQueries({
@NamedQuery(name = "PersonasByRfc", query = "FROM Persona p WHERE p.rfc = :rfc "),
@NamedQuery(name = "PersonasPorTipoPersona", query = "FROM Persona p WHERE p.tipoPersona = :tipoPersona "),
@NamedQuery(name = "PersonaByClienteId", query = " SELECT c.persona FROM Cliente c WHERE c.clienteId = :clienteId "),
@NamedQuery(name = "PersonaMoralActiva", query = "SELECT c.persona FROM Cliente c WHERE c.persona.regimenFiscal = 'MORAL' AND c.estatus = 'ACTIVO' ")
})
public class Persona extends CommonBusinessProperties {
private static final long serialVersionUID = 2846894501470704239L;
private Long personaId;
private CatTipoPersona tipoPersona;
private String descripcionTipoPersona;
private String nombres;
private String apellidoMaterno;
private String apellidoPaterno;
private RegimenFiscal regimenFiscal;
private Nacionalidad nacionalidad;
private String rfc;
private String curp;
private Genero genero;
private Date fechaNacimiento;
private Boolean esCliente;
private Boolean esContratante;
private Boolean esPagador;
private Boolean esMontoPagar;
private BigDecimal montoPagar;
private Boolean esPorcentajePagar;
private String porcentajePagar;
private String origenPersona;
private String parentesco;
private Parentesco tranParentesco;
private Cliente cliente;
private ExpedientePersona expedientePersona;
private List<Domicilio> domicilios = new ArrayList<>(0);
private List<Telefono> telefonos = new ArrayList<>(0);
private List<Correo> correos = new ArrayList<>(0);
/**
* Constructor <br>
* Crea una nueva instancia de Persona. <br>
*
* @author Orlando Adrián Ramos Galván (oramos@legosoft.com.mx, orlandoa.ramos@outlook.com)<br>
*/
public Persona() {
super();
}
/**
* Constructor <br>
* Crea una nueva instancia de Persona. <br>
*
* @param personaId
* @author Orlando Adrián Ramos Galván (oramos@legosoft.com.mx, orlandoa.ramos@outlook.com)<br>
*/
public Persona(Long personaId) {
super();
this.personaId = personaId;
}
/**
* Constructor <br>
* Crea una nueva instancia de Persona. <br>
*
* @param personaBuilder
* @author Orlando Adrián Ramos Galván (oramos@legosoft.com.mx, orlandoa.ramos@outlook.com)<br>
*/
public Persona(PersonaBuilder personaBuilder) {
this.tipoPersona = personaBuilder.getTipoPersona();
this.descripcionTipoPersona = personaBuilder.getDescripcionTipoPersona();
this.nombres = personaBuilder.getNombresORazonSocial();
this.apellidoMaterno = personaBuilder.getApellidoMaterno();
this.apellidoPaterno = personaBuilder.getApellidoPaterno();
this.setRegimenFiscal(personaBuilder.getRegimenFiscal());
this.setNacionalidad(personaBuilder.getNacionalidad());
this.setRfc(personaBuilder.getRfc());
this.curp = personaBuilder.getCurp();
this.genero = personaBuilder.getGenero();
this.fechaNacimiento = personaBuilder.getFechaNacimiento();
this.esCliente = personaBuilder.getEsCliente();
this.esContratante = personaBuilder.getEsContratante();
this.esPagador = personaBuilder.getEsPagador();
this.esMontoPagar = personaBuilder.getEsMontoPagar();
this.montoPagar = personaBuilder.getMontoPagar();
this.esPorcentajePagar = personaBuilder.getEsPorcentajePagar();
this.porcentajePagar = personaBuilder.getPorcentajePagar();
this.domicilios = personaBuilder.getDomicilios();
this.telefonos = personaBuilder.getTelefonos();
this.correos = personaBuilder.getCorreos();
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "persona_id", unique = true, nullable = false, updatable = false)
public Long getPersonaId() {
return this.personaId;
}
public void setPersonaId(Long personaId) {
this.personaId = personaId;
}
@ManyToOne(fetch = FetchType.EAGER, targetEntity = CatTipoPersona.class)
@JoinColumn(name = "tipo_persona_id")
@Fetch(FetchMode.SELECT)
public CatTipoPersona getTipoPersona() {
return this.tipoPersona;
}
public void setTipoPersona(CatTipoPersona tipoPersona) {
this.tipoPersona = tipoPersona;
}
@Column(name = "tipo_persona", length = 50)
public String getDescripcionTipoPersona() {
return this.descripcionTipoPersona;
}
public void setDescripcionTipoPersona(String tipoPersona) {
this.descripcionTipoPersona = tipoPersona;
}
@Column(name = "origen_persona", length = 50)
public String getOrigenPersona() {
return this.origenPersona;
}
@Column(name = "nombres", length = 100)
public String getNombresORazonSocial() {
return this.nombres;
}
public void setNombresORazonSocial(String nombres) {
this.nombres = nombres;
}
@Column(name = "apellido_materno", length = 100)
public String getApellidoMaterno() {
return this.apellidoMaterno;
}
public void setApellidoMaterno(String apellidoMaterno) {
this.apellidoMaterno = apellidoMaterno;
}
@Column(name = "apellido_paterno", length = 100)
public String getApellidoPaterno() {
return this.apellidoPaterno;
}
public void setApellidoPaterno(String apellidoPaterno) {
this.apellidoPaterno = apellidoPaterno;
}
@Transient
public String getNombreCompleto() {
return this.nombres + " " + this.apellidoMaterno + " " + this.apellidoPaterno;
}
@Column(name = "regimen_fiscal", length = 100)
@Enumerated(EnumType.STRING)
public RegimenFiscal getRegimenFiscal() {
return this.regimenFiscal;
}
public void setRegimenFiscal(RegimenFiscal regimenFiscal) {
this.regimenFiscal = regimenFiscal;
}
@Column(name = "nacionalidad", length = 100)
@Enumerated(EnumType.STRING)
public Nacionalidad getNacionalidad() {
return this.nacionalidad;
}
public void setNacionalidad(Nacionalidad nacionalidad) {
this.nacionalidad = nacionalidad;
}
@Column(name = "rfc", length = 13)
public String getRfc() {
return this.rfc;
}
public void setRfc(String rfc) {
this.rfc = rfc;
}
@Column(name = "curp", length = 45)
public String getCurp() {
return this.curp;
}
public void setCurp(String curp) {
this.curp = curp;
}
@Column(name = "genero", length = 1)
@Convert(converter = GeneroConverter.class)
public Genero getGenero() {
return this.genero;
}
public void setGenero(Genero genero) {
this.genero = genero;
}
@Temporal(TemporalType.DATE)
@Column(name = "fecha_nacimiento", length = 10)
public Date getFechaNacimiento() {
return this.fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
@Column(name = "es_cliente")
public Boolean isCliente() {
return this.esCliente;
}
public void setIsCliente(Boolean esCliente) {
this.esCliente = esCliente;
}
@Column(name = "es_contratante")
public Boolean esContratante() {
return this.esContratante;
}
public void setEsContratante(Boolean esContratante) {
this.esContratante = esContratante;
}
@Column(name = "es_pagador")
public Boolean isEsPagador() {
return this.esPagador;
}
public void setEsPagador(Boolean esPagador) {
this.esPagador = esPagador;
}
@Column(name = "es_monto_pagar")
public Boolean getEsMontoPagar() {
return this.esMontoPagar;
}
public void setEsMontoPagar(Boolean esMontoPagar) {
this.esMontoPagar = esMontoPagar;
}
@Column(name = "monto_pagar", precision = 16, scale = 4)
public BigDecimal getMontoPagar() {
return this.montoPagar;
}
public void setMontoPagar(BigDecimal montoPagar) {
this.montoPagar = montoPagar;
}
@Column(name = "es_porcentaje_pagar")
public Boolean getEsPorcentajePagar() {
return this.esPorcentajePagar;
}
public void setEsPorcentajePagar(Boolean esPorcentajePagar) {
this.esPorcentajePagar = esPorcentajePagar;
}
@Column(name = "porcentaje_pagar", length = 6)
public String getPorcentajePagar() {
return this.porcentajePagar;
}
public void setPorcentajePagar(String porcentajePagar) {
this.porcentajePagar = porcentajePagar;
}
public void setOrigenPersona(String origenPersona) {
this.origenPersona = origenPersona;
}
@OneToOne(fetch = FetchType.EAGER, mappedBy = "persona", targetEntity = ExpedientePersona.class, optional = true)
protected ExpedientePersona getExpedientePersona() {
return this.expedientePersona;
}
protected void setExpedientePersona(ExpedientePersona expedientePersonas) {
this.expedientePersona = expedientePersonas;
}
/**
* @return parentesco
*/
@Column(name = "parentesco", length = 50)
public String getParentesco() {
return parentesco;
}
/**
* @param parentesco
*/
public void setParentesco(String parentesco) {
this.parentesco = parentesco;
}
@OneToOne(fetch = FetchType.EAGER, mappedBy = "persona", targetEntity = Cliente.class, cascade = {
CascadeType.MERGE, CascadeType.DETACH })
@Fetch(FetchMode.SELECT)
public Cliente getCliente() {
return this.cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
/**
* @return si la persona esta relacionada al contratante y es una familiar este campo idnica que
* parentesco tienen.
*/
@Transient
public Parentesco getTranParentesco() {
return tranParentesco;
}
/**
* @param tranParentesco
*/
public void setTranParentesco(Parentesco tranParentesco) {
this.tranParentesco = tranParentesco;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "persona", targetEntity = Domicilio.class, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH })
@Fetch(FetchMode.SELECT)
@OrderBy
protected List<Domicilio> getDomicilios() {
return this.domicilios;
}
protected void setDomicilios(List<Domicilio> domicilios) {
this.domicilios = domicilios;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "persona", targetEntity = Telefono.class, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH })
@Fetch(FetchMode.SELECT)
@OrderBy
protected List<Telefono> getTelefonos() {
return this.telefonos;
}
protected void setTelefonos(List<Telefono> telefonos) {
this.telefonos = telefonos;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "persona", targetEntity = Correo.class, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH })
@Fetch(FetchMode.SELECT)
@OrderBy
protected List<Correo> getCorreos() {
return this.correos;
}
protected void setCorreos(List<Correo> correos) {
this.correos = correos;
}
}
,因为向量刚刚被初始化,你必须使用像{{1}这样的东西但是,无论如何,你再次使用它的方式是错误的,每次循环时你都要重新初始化变量,因此你只是用它来临时存储一个变量。相反,如果您想要实际存储每个行长度,则需要将其移动到循环外部。而且我不知道你为什么再把sizenums[i] = tileline.length();
放在那里,似乎没必要。
答案 1 :(得分:0)
for (int i=0; i <= tileline.end(); i++) {
vector <int> sizenums;
sizenums[i] = tileline.length();
首先,通过循环每次迭代创建一个新向量。您需要创建向量,然后循环或遍历它。
然而,在
之后vector<int> sizenums;
你的矢量是空的。 []的直接访问不起作用。使用push_back将元素添加到结尾:
vector <int> sizenums;
...
for (int i=0; i <= tileline.end(); i++) {
sizenums.push_back(tileline.length());
此外:
for(int i ...
...
i++;
不要手动增加循环变量。 for循环已处理。