STL 向量的重载运算符
Overloading operators for STL Vector
我知道这通常不是最好的主意,但我决定试一试。 我正在尝试重载 + 运算符以对两个向量进行元素明智添加。出于某种原因,它只正确返回向量中的第一个值。我不知道出了什么问题?如果我在计算 sum 数组的元素时使用push_back而不是调整大小,它也不起作用。这是代码:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <vector>
using namespace std;
class dvector{
public:
vector<double> q;
dvector(vector<double>);
dvector();
};
dvector::dvector(vector<double> a) {
q=a;
};
dvector::dvector() {
vector<double> q;
};
dvector operator+(dvector c1, dvector c2)
{
int sz=c1.q.size();
dvector sum;
sum.q.resize(sz);
double temp;
for (int i=0; i<sz; i++){
sum.q[i]=c1.q[i]+c2.q[i];
return sum;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<double> test1;
test1.resize(10);
for (int i=0; i<10;i++){
test1[i]=i;
}
vector<double> test2;
test2.resize(10);
for (int i=0; i<10;i++){
test2[i]=2;
}
dvector dtest1(test1);
dvector dtest2(test2);
dvector sum=dtest1+dtest2;
for (int i =0;i<10;i++)
{
cout<<sum.q[i]<<' ';
}
getch();
return 0;
}
您在第一次迭代后立即return
for
循环。您应该return sum;
移动到operator+
的最后一行。
因为你回来得太快了。 return
语句不仅会脱离for loop
,还会返回功能。
dvector operator+(dvector c1, dvector c2)
{
int sz=c1.q.size();
dvector sum;
sum.q.resize(sz);
double temp;
for (int i=0; i<sz; i++){
sum.q[i]=c1.q[i]+c2.q[i];
//return sum; // don't return until you finish calculating
}
return sum; // move to here
}
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板