我提供以下代码来说明我的问题:
#include <vector>
struct Complex
{
int a, b, c;
Complex() : a(3), b(4), c(10) {}
operator int() const { return a+b+c; }
};
int main()
{
Complex abc;
int value = (abc);
Complex def;
def.a = 20;
int value2 = (def);
std::vector<Complex> ar;
ar.push_back(abc);
ar.push_back(def);
std::vector<int> ar2;
ar2.push_back(abc);
ar2.push_back(def);
std::vector<int> ar3;
ar3 = (ar);
}
由于表达式为ar3 = (ar)
,因此无法编译。我已声明了转换运算符,以便Complex
类可用于预期int
的位置。我是否也可以将Complex
对象数组分配给int
数组?
我尝试为Complex
数组声明非成员转化运算符,但不允许这样做:
void std::vector<int> operator = (std::vector<Complex> complexArray)
{
std::vector<int> abc;
for(int i=0; i<complexArray.size(); i++)
abc.push_back(complexArray[i]);
return abc;
}
答案 0 :(得分:4)
您可以考虑std::vector
的范围构造函数。
std::vector<int> ar3(begin(ar), end(ar));
答案 1 :(得分:3)
每当你想要转换某些内容时,std::transform
函数可能会很好用。
在您的情况下,您可以执行类似
的操作// Create the new vector with the same size as the complex vector
std::vector<int> abc(complexArray.size());
std::transform(std::begin(complexVector), std::end(complexVector),
std::begin(abc),
[](Complex const& complex)
{
int result;
// Code here that converts the complex structure to an integer
// and stores the integer in the variable result
return result;
});
在上面的std::transform
调用之后(一旦你完成了实际进行结构转换的代码),向量abc
将包含来自Complex
结构的所有转换整数。源向量complexVector
。
答案 2 :(得分:2)
忘记自动隐式转换(至少对于标准库容器)。但是,如果您愿意接受明确的转换,如下例所示
const std::vector<int> vi {1, 2, 3, 4, 5};
const std::vector<double> vd = container_cast(vi);
然后执行container_cast()
实用程序。请注意,它不仅可以在不同元素类型(即std::vector<int>
到std::vector<double>
)的同一模板容器的实例化之间进行转换,还可以在不同容器之间进行转换(例如std::vector
到{{1} })。
std::list