我想这个问题正在建立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);在代码中。
答案 0 :(得分:1)
虽然原始int
和double
类型之间存在隐式转换规则,但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>
,则同样如此。如果您真的关心效率,请使用reserve
和push_back
进行配置并与嵌套循环进行比较....