vector<double> x1 = { /* 在此处填写数据 */ }; vector<double> y1 = { /* 在此处填写数据 */ };怎么填充txt中的数据点
时间: 2024-05-07 15:22:29 浏览: 5
你可以按照以下的格式在txt文件中填充数据点:
```
x1 y1
x2 y2
x3 y3
...
```
例如,如果你有这样的数据点:(2, 3), (4, 5), (6, 7),你可以这样填充txt文件:
```
2 3
4 5
6 7
```
然后,你可以使用以下代码将数据点读入vector<double>中:
```
vector<double> x1, y1;
ifstream fin("data.txt");
double x, y;
while (fin >> x >> y) {
x1.push_back(x);
y1.push_back(y);
}
fin.close();
```
这个代码片段将打开名为"data.txt"的文件,读取每行中的两个数字并将它们添加到对应的vector中。最后,文件将被关闭。
相关问题
利用c++编写下列程序,假设有向量X=(x1, x2,…, xn)和Y=(y1, y2,…, yn) 它们之间的加、减和乘法分别定义为 X + Y = (x1 + y1, x2 + y2,…, xn + yn) X - Y = (x1 - y1, x2 - y2,…, xn - yn) X * Y = x1 * y1 + x2 * y2 +…+ xn * yn 编写程序定义向量类Vector, 重载运算符+、-、*和=, 实现向量之间的加、减、乘、赋值运算; 重载运算符>>、<<实现向量的输入、输出功能
以下是向量类Vector的实现代码:
#include <iostream>
#include <vector>
using namespace std;
class Vector {
private:
vector<double> v;
public:
Vector(int n) {
v.resize(n, 0);
}
int length() const {
return v.size();
}
double& operator[](int i) {
return v[i];
}
const double& operator[](int i) const {
return v[i];
}
Vector operator+(const Vector& other) const {
Vector result(length());
for (int i = 0; i < length(); i++) {
result[i] = v[i] + other[i];
}
return result;
}
Vector operator-(const Vector& other) const {
Vector result(length());
for (int i = 0; i < length(); i++) {
result[i] = v[i] - other[i];
}
return result;
}
double operator*(const Vector& other) const {
double result = 0;
for (int i = 0; i < length(); i++) {
result += v[i] * other[i];
}
return result;
}
Vector& operator=(const Vector& other) {
if (this != &other) {
v = other.v;
}
return *this;
}
friend istream& operator>>(istream& in, Vector& vec) {
int n = vec.length();
for (int i = 0; i < n; i++) {
in >> vec[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Vector& vec) {
out << '(';
int n = vec.length();
for (int i = 0; i < n; i++) {
out << vec[i];
if (i < n - 1) {
out << ", ";
}
}
out << ')';
return out;
}
};
下面是一些测试函数:
void test_add() {
Vector a(3);
a[0] = 1;
a[1] = 2;
a[2] = 3;
Vector b(3);
b[0] = 4;
b[1] = 5;
b[2] = 6;
Vector c = a + b;
cout << c << endl; // expected output: (5, 7, 9)
}
void test_sub() {
Vector a(3);
a[0] = 1;
a[1] = 2;
a[2] = 3;
Vector b(3);
b[0] = 4;
b[1] = 5;
b[2] = 6;
Vector c = a - b;
cout << c << endl; // expected output: (-3, -3, -3)
}
void test_dot() {
Vector a(3);
a[0] = 1;
a[1] = 2;
a[2] = 3;
Vector b(3);
b[0] = 4;
b[1] = 5;
b[2] = 6;
double c = a * b;
cout << c << endl; // expected output: 32
}
void test_io() {
Vector vec(3);
cout << "Please input a vector of length 3:" << endl;
cin >> vec;
cout << "The input vector is: " << vec << endl;
}
int main() {
test_add();
test_sub();
test_dot();
test_io();
return 0;
}
double my_target::match_sim(vector<my_target> old) { #ifdef method // ssim comparision Scalar SSIM1 = getMSSIM(this->pic, old[0].pic); double ssim1 = (SSIM1.val[2] + SSIM1.val[1] + SSIM1.val[0]) / 3 * 100; Scalar SSIM2 = getMSSIM(this->pic, old[1].pic); double ssim2 = (SSIM2.val[2] + SSIM2.val[1] + SSIM2.val[0]) / 3 * 100; (ssim1 > ssim2) ? md_car = 0 : md_car = 1; cout << "sim1 " << ssim1 << "sim2 " << ssim2 << endl; cout << "result " << md_car << endl; #else double mindist = 1000000, md_car, simi = 0, ms_car; double x1 = this->bbox.x + this->bbox.width / 2; double y1 = this->bbox.y + this->bbox.height / 2; // euler distance for (int i = 0; i < old.size(); i++) { double x2 = old[i].bbox.x + old[i].bbox.width / 2; double y2 = old[i].bbox.y + old[i].bbox.height / 2; double dist = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); // cout<<"dist"<<dist; if (dist < mindist) { mindist = dist; md_car = i; } } #endif return md_car; }
这段代码是一个函数,接受一个 vector<my_target> 类型的参数 old,返回一个 double 类型的值。
函数主要作用是计算当前目标和之前的目标 vector 中的目标的相似度,找到最相似的目标并返回其索引。
函数中的 #ifdef method 和 #else 是预编译指令,用于根据编译时的定义选择不同的代码段。当定义了 method 时,会执行相似度比较的代码段,否则执行欧几里得距离比较的代码段。
在相似度比较的代码段中,使用了 OpenCV 库中的 getMSSIM 函数计算两张图像的结构相似度(SSIM),并将其转化为百分比形式。然后根据计算结果选择相似度较高的目标,并将其索引赋值给 md_car 变量。
在欧几里得距离比较的代码段中,先计算当前目标的中心点坐标和之前目标中心点坐标的欧几里得距离,然后选择距离最小的目标,并将其索引赋值给 md_car 变量。
最后,函数返回 md_car 变量作为最匹配的目标的索引。