繁体   English   中英

向量中的数据

[英]Data in Vectors

我有两个不同类型的向量

1. std::vector<project3::Vertex<VertexType, EdgeType>> Vertice2; //Contains a list of Vertices
2. std::vector<std::string>temp12;

我的要求是我要存储从Vertice2到temp12的所有数据。 尝试了很多不同的方法,但是会出错。 连类型转换都不适合我。

我最近尝试过的是temp.assign(g1.Vertice2.begin(), g1.Vertice2.end());

Error: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'project3::Vertex<VertexType,EdgeType>' to 'const std::basic_string<_Elem,_Traits,_Ax> &'   c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory  208 1   Project_3_Revised

您有一个要存储在橙色vector的苹果vector 但是苹果不是桔子,这是您的基本问题。

您需要将temp设为vector<Vertex...> ,或者需要将每个Vertex对象转换为一个string ,然后存储生成的string s。 如果您尝试将顶点填充到vector<string>而不进行转换,请放弃它。 您不能也不应该尝试这样做。 您正试图将一艘战舰放入一个铅笔杯中。

如果您进行转换,那么使用std::transform以及您自己设计的转换函数是一种非常简单的方法。

伪代码如下:

std::string ConvertVertexToString(const Vertex& vx)
{
  std::stringstream ss;
  ss << vx.prop_a << " " << vx.prop_b;
  return ss.str();
}

int main()
{
  ...

  std::transform(Vertice2.begin(), Vertice2.end(), back_inserter(temp12), &ConvertVertexToString);

}

C ++不提供对std :: string的任何默认强制转换。 C ++的模板是强类型的,就像其他语言一样。

您需要创建一个方法或函数来将project3:Vertex转换为std :: string。

一旦有了这些,就可以使用C ++的transform函数。

std::transform(Vertice2.begin(), Vertice2.end(), temp12.begin(), my_function_to_make_strings);

C ++不支持任意分配不同类型的对象。 在大多数情况下,强制转换也不起作用,即使您强制强制转换(如<reinterpret_cast> ),也不安全。

最好的选择是使用运算符重载和复制构造函数来显式定义您期望从对象获得的复制行为。 例如,当您将顶点分配给字符串时,不清楚应复制哪些数据元素。

您的基本问题是您拥有project3::Vertex<VertexType, EdgeType> ,并且您需要std::string 那么如何将一个转换为另一个呢?

转换为字符串( std::string或其他)的通常方法是重载<<运算符。 所以你需要先定义一个函数

std::ostream&
operator<<(std::ostream& dest,
           project3::Vertex<VertexType, EdgeType> const& value)

这将定义数据转换为字符串时的外观。 一旦有了它,类似:

std::transform(
    Vertice2.begin(), Vertice2.end(),
    std::back_inserter(temp12),
    (std::string (*)(
        project3::Vertex<VertexType, EdgeType> const&)) boost::lexical_cast);

应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM