二维矢量类型转换

时间:2014-02-12 00:39:50

标签: c++ vector casting 2d-vector

我想这个问题正在建立C++ convert vector<int> to vector<double>

我试图将int类型的二维向量(存储在对象中)转换为double类型的二维向量。根据我提供的SO链接,

std::vector<int> intvec;
std::vector<double> doubvec(intvec.begin(),intvec.end());

应该对原始矢量进行类型转换(确实如此)。

那么为什么以下代码不起作用?

std::vector<std::vector<double>> rotmat(Mesh.matrix.begin(),Mesh.matrix.end());

我可以在下面这行做得很好,所以我知道没有其他错误。我错过了什么?

std::vector<double> dubvec(Mesh.matrix[0].begin(), Mesh.matrix[0].end());

网格定义为:

class MeshOut
{
public:

MeshOut();



MeshOut(vector < vector < int >>, vector < vector < int >>, int, int, double, int, bool);

vector<vector<int>> matrix;
vector<vector<int>> lv_mat;
int shortNum;
int SourceNum;
double smallestMeshSize;
int factor;
bool Fine;
....

我称之为Meshout Mesh(x,y,z,i,j,k,l);在代码中。

2 个答案:

答案 0 :(得分:1)

虽然原始intdouble类型之间存在隐式转换规则,但std::vector<int>std::vector<double>之间存在非转换规则。

事实上,从类层次结构的角度来看,这两种类型之间没有关系。

答案 1 :(得分:0)

简短回答:使用循环并继续使用它;-P

答案很长:如果你不顺利的话,你可以避免循环。

你正在使用的vector构造函数需要一对迭代器:当它迭代时,它基本上用vector填充element_type(*iterator),因此需要element_type从单个解引用的迭代器值构造。要构造vector<vector<double>>,迭代器需要生成vector<double>可以隐式构造的值。每cppreference vector docs,可能有用的构造函数是:

  • vector(const vector&)

  • vector(vector&&)

  • vector(std::initializer_list<T> init, const Allocator& = Allocator())

其中,前两个需要预先存在的vector<double>个对象,但最后一个更有趣。由于您的Mesh是用户定义的类型,并且您创建了一个迭代器类型,当解除引用时会生成从std::initializer_list<double>中的连续vector<int>切出的.matrix个对象,那么您可以支持您尝试过的vector<vector<double>>构造语法。然后std::initializer_list<T>是有效的临时值,可能无法进行优化,但如果在使用单个显式循环后复制std::vector<double>,则同样如此。如果您真的关心效率,请使用reservepush_back进行配置并与嵌套循环进行比较....

相关问题