举一个class类型的vector的例子
时间: 2024-01-22 08:17:42 浏览: 63
下面是一个class类型的vector的例子,其中class名字为Person:
```c++
#include <iostream>
#include <vector>
#include <string>
class Person {
public:
std::string name;
int age;
Person(std::string n, int a) : name(n), age(a) {}
};
int main() {
std::vector<Person> people;
Person p1("Alice", 25);
Person p2("Bob", 30);
Person p3("Charlie", 35);
people.push_back(p1);
people.push_back(p2);
people.push_back(p3);
for (const auto& person : people) {
std::cout << person.name << " is " << person.age << " years old." << std::endl;
}
return 0;
}
```
这个例子创建了一个名为Person的class来表示人的信息。然后通过vector来存储多个人的信息,使用push_back函数来添加新的人。最后通过循环遍历vector中的每个人,并输出其名字和年龄。
相关问题
c++如何拷贝一个存放自定义类型的vector
要拷贝一个存放自定义类型的vector,你需要确保自定义有合适的拷贝构造函数和赋值运算符重载。以下是一种常见的方法来拷贝一个存放自定义类型的vector:
```cpp
#include <iostream>
#include <vector>
// 自定义类型
class MyClass {
public:
int data;
MyClass(int d) : data(d) {}
// 拷贝构造函数
MyClass(const MyClass& other) {
data = other.data;
}
// 赋值运算符重载
MyClass& operator=(const MyClass& other) {
if (this != &other) {
data = other.data;
}
return *this;
}
};
int main() {
std::vector<MyClass> vec1;
// 向vec1添加元素
vec1.push_back(MyClass(1));
vec1.push_back(MyClass(2));
vec1.push_back(MyClass(3));
// 拷贝vec1到vec2
std::vector<MyClass> vec2(vec1);
// 打印vec2的内容
for (const auto& element : vec2) {
std::cout << element.data << " ";
}
return 0;
}
```
在上面的例子中,我们首先定义了一个自定义类型`MyClass`,然后在`main`函数中创建了一个存放`MyClass`对象的vector `vec1`。接下来,我们使用`push_back`方法向`vec1`添加了一些元素。然后,我们通过在初始化时将`vec1`传递给`vec2`来拷贝`vec1`。最后,我们打印了`vec2`的内容,以验证拷贝是否成功。
请注意,这种拷贝方式适用于存放自定义类型的vector,只要确保自定义类型具有合适的拷贝构造函数和赋值运算符重载。
先通过模板定义一个Point类模板来保存顶点的坐标信息。Point坐标的类型是可变的,比如坐标类型可以是int,可以是float,可以是double等等。再定义一个Facet类来表示每一个面片。面片类也是模板,面片每个顶点的类型是可变的,跟Point模板对应。Facet通过一个vector数组vector<Point<T> *> vertices;记录组成它的几个顶点,每个顶点是一个Point类型的指针。写出这段程序
好的,以下是代码实现:
```cpp
#include <iostream>
#include <vector>
template <typename T>
class Point {
public:
Point(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {}
T x, y, z;
};
template <typename T>
class Facet {
public:
Facet(std::vector<Point<T>*> _vertices) : vertices(_vertices) {}
std::vector<Point<T>*> vertices;
};
int main() {
Point<float> p1(1.0f, 2.0f, 3.0f);
Point<float> p2(4.0f, 5.0f, 6.0f);
std::vector<Point<float>*> vertices;
vertices.push_back(&p1);
vertices.push_back(&p2);
Facet<float> f(vertices);
return 0;
}
```
在这个例子中,我们定义了一个Point类模板来保存顶点的坐标信息,坐标类型是可变的。我们也定义了一个Facet类模板来表示每个面片,通过一个vector数组来记录组成它的几个顶点,每个顶点是一个Point类型的指针。在main函数中,我们创建了两个Point<float>对象,并将它们的指针存储到一个vector中,然后创建了一个Facet<float>对象来表示一个面片。
阅读全文