stl向量之间的自动转换

Sin*_*pse 4 c++ stl vector template-argument-deduction

我想要的是一种复制std::vector<int>到另一个std::vector<myStruct>与赋值操作符,其中myStruct可分配的int.所以我写了这段代码:

#include <vector>
#include <iostream>

using namespace std;

struct myStruct
{
   myStruct(int& a) : _val(a) { }
   myStruct(int&& a) : _val(a) { }

   myStruct& operator=(int& a)
   {
      _val = a;
      return *this;
   }

   int _val;
};

int main()
{
   vector<int> ivec;
   ivec.push_back(1);
   vector<myStruct> svec = ivec;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我错误,因为它找不到有效的转换std::vector<myStruct>,std::vector<int>虽然int可以隐式转换为myStruct.另一方面,不能在类外声明赋值运算符,因此我推断手动编写运算符不是一种选择.那么在这种情况下我该怎么办?

***更新:正如Blastfurnace和其他人所说,这可以使用此代码而不是赋值来解决:

vector<myStruct> svec(ivec.begin(), ivec.end());
Run Code Online (Sandbox Code Playgroud)

但是想象一下,在我想要写一个库,并要处理这个库本身,使用户可以只写情况std::vector<myStruct> svec = someFunction()someFunction返回std::vector<int>.对此没有任何解决方案吗?

Bla*_*ace 5

您可以使用带有迭代器范围的构造函数重载:

vector<myStruct> svec(ivec.begin(), ivec.end());
Run Code Online (Sandbox Code Playgroud)