我如何构建具有构造函数参数的对象的向量
How do I construct a vector of objects that have constructor arguments?
我想做类似的事情:
class Circle {
int radius;
public:
Circle( int r ) : radius(r) {}
}
vector<Circle> circlesVector;
for (int i = 0; i < 10; i++) {
Circle circle(i);
circlesVector.push_back(circle);
}
,但这似乎并不能像我想要的那样奏效。向量尝试使用圆圈(圆圈&amp;)的构造函数或我不理解或期望的某些行为创建圆对象。
您发布的代码在根本上很好,栏一些错别字和缺少。您可以看到此工作演示。
,但您无需创建临时Circle
对象。您可以这样做:
for (int i = 0; i < 10; i++) {
circlesVector.push_back(i);
}
因为Circle
是可以从int
中隐式构造的。请注意,您还可以使用初始化列表:
vector<Circle> circlesVector{0,1,2,3,4,5,6,7,8,9};
或者,使用emplace_back
:
circlesVector.emplace_back(i);
class Circle具有一个转换构造函数,该转换构造函数将类型INT对象转换为类型circle的对象:
Circle( int r ) : radius(r) {}
因此,您可以使用以下事实来构建向量
for (int i = 0; i < 10; i++) {
circlesVector.push_back( i );
}
您可以利用您提供的转换构造函数,因此Circle
可以隐式从int
:
for (int i = 0; i < 10; i++) {
circlesVector.push_back(i);
}
很好。但是,如果构造函数中有许多变量,则可以使用std::transform
:
Circle initC ( Circle c) {
static int i = 0;
return Circle(i++); // copy assignment operator
} // will be used to assign new Circle into default
// version of Circle present already in vector
int main(int argc, char *argv[])
{
std::vector<Circle> cVec(10);
std::transform( cVec.begin(), cVec.end(),
cVec.begin(), initC);
return 0;
}
您还可以通过创建一个临时向量的Radiuses来完成所有操作:
示例:
class Circle
{
private:
int radius;
public:
Circle( int r ) : radius(r) {}
int GetRadius() const { return radius; }
};
int main()
{
std::vector<int> radii(10); // vector to hold your radiuses
std::iota(radii.begin(), radii.end(), 0); // initialize them to the desired sizes
std::vector<Circle> circles(radii.begin(), radii.end()); // use your conversion constructor
for (std::size_t i = 0; i < circles.size(); ++i)
{
std::cout << "Circle[" << i << "] radius = " << circles[i].GetRadius() << "n";
}
return 0;
}
"矢量尝试使用圆圈(circle&amp;)的构造函数或我不理解或期望的某些行为来创建圆对象。"。STL容器(至少使用C 98)复制您添加到它们中的构造对象。
相关文章:
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在按值调用 (c++) 中转发构造函数参数
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 如何在构造函数参数中初始化"std::set"?
- 何时应在构造函数参数中使用 const C++?
- 使用模板化结构作为构造函数参数
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 如何使输入文本文件成为构造函数参数?c++
- shared_ptr构造函数参数是否应按值传递
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 复制构造函数参数为0
- 用作成员构造函数参数的函数的求值顺序
- 结构中的默认成员值或默认构造函数参数
- C++将引用成员绑定到构造函数参数
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 模板函数指针参数与构造函数参数
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何基于构造函数参数模板化类成员函数的代码
- 将派生类构造函数参数传递给受保护的成员
- 如何根据构造函数参数使用超类类型初始化成员变量?