c++打印一个point的vector
时间: 2023-10-12 10:14:07 浏览: 61
可以使用以下代码来打印一个point的vector:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct Point {
int x, y;
Point(int x, int y): x(x), y(y) {}
};
int main() {
vector<Point> points;
points.push_back(Point(1, 2));
points.push_back(Point(3, 4));
for (auto &p : points) {
cout << "(" << p.x << ", " << p.y << ")" << endl;
}
return 0;
}
```
这段代码创建了一个Point结构体,并使用vector存储多个Point。使用for循环遍历vector中的每个Point,并使用cout打印每个Point的x和y坐标。
相关问题
Point有两个公有的int数据x和y。通过vector<Point> pts = {Point(1,2), Point(4,10), Point(5,1), Point(1,10), Point(3,2),Point(2,6), Point(4,3),Point(2,1)};用C++ 建立一个Point类型的vector数组,之后将pts进行排序。注意要自己写一个返回值为bool类型的函数作为sort的第三个参数,输入是两个const Point &类型的引用。比较p1和p2大小时,两者先比较x,相同的时候再比较y。
好的,我知道你的问题了。以下是实现代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Point {
public:
int x, y;
Point(int x, int y) : x(x), y(y) {}
};
bool cmp(const Point &p1, const Point &p2) {
if (p1.x != p2.x) return p1.x < p2.x;
else return p1.y < p2.y;
}
int main() {
vector<Point> pts = {Point(1,2), Point(4,10), Point(5,1), Point(1,10), Point(3,2),Point(2,6), Point(4,3),Point(2,1)};
sort(pts.begin(), pts.end(), cmp);
for (auto p : pts) {
cout << "(" << p.x << ", " << p.y << ")" << endl;
}
return 0;
}
```
这里我们定义了一个`Point`类,包含了两个公有的int类型变量x和y。接着我们创建了一个`pts`的`vector`数组,并使用花括号内的`Point`对象进行初始化。
我们自己写了一个`cmp`函数,用于比较两个`Point`对象的大小。首先判断它们的x值,如果不同则直接返回比较结果;如果相同则比较它们的y值。这个cmp函数是作为sort函数的第三个参数传入的。
最后,我们使用`sort`函数对`pts`进行排序,并使用循环输出排序后的结果。
c++ vector<Point> 去除重复点
在C++中,如果你有一个`vector<Point>`容器,其中包含许多`Point`对象,并且你想去除其中的重复点,可以采用多种方法:
1. **使用`std::set`**:由于`set`是一个不允许有重复元素的数据结构,你可以先将`vector`转换为`set`,然后再将其转换回`vector`。这会自动删除重复项,因为每个元素都是唯一的。
```cpp
std::set<Point> uniqueSet(points.begin(), points.end());
vector<Point> uniquePoints(uniqueSet.begin(), uniqueSet.end());
```
2. **自定义函数**:创建一个函数来比较两个点是否相等,然后遍历整个向量并移除重复的点。
```cpp
bool isDuplicate(const Point& a, const Point& b) {
return a.x == b.x && a.y == b.y;
}
vector<Point> removeDuplicates(vector<Point>& points) {
vector<Point> unique_points;
for (const auto& point : points) {
if (unique_points.empty() || !isDuplicate(point, unique_points.back())) {
unique_points.push_back(point);
}
}
return unique_points;
}
```
3. **利用STL算法**:如果允许使用C++17或更高版本,可以使用`std::remove_if`和`std::unique`结合`std::copy`来简化操作:
```cpp
std::vector<Point> removeDuplicates(std::vector<Point>& points) {
std::sort(points.begin(), points.end(), [](const Point& a, const Point& b) { return a < b; }); // 如果不希望改变原始顺序,去掉这一行
points.erase(std::unique(points.begin(), points.end()), points.end());
return points;
}
```
在这个例子中,我们假设`Point`类有一个小于运算符重载,以便对向量进行排序。
阅读全文