我想在下面添加两个向量是代码片段: -
#include <iostream>
#include <vector>
using namespace std;
int main()
{
unsigned int i = 0;
vector <float> v1;
vector <float> v2;
vector <float> v3;
cout << "Filling the Numbers\n";
for (i=5;i < 125 ; i = i + 5) {
v1.push_back(i/10);
v2.push_back(i/100);
}
cout << "Adding the numbers\n";
for (i = 0; i < v1.size(); i++) {
v3[i] = v1[i] + v2[i];
}
cout << "Printing the numbers\n";
for (i = 0; i < v3.size() ; i++) {
cout << v3[i];
}
return 0;
}
程序在第18行崩溃。在我看来,我需要为+操作执行运算符重载。请帮忙。
答案 0 :(得分:8)
此行不起作用,因为没有分配v3[i]
:
v3[i] = v1[i] + v2[i];
你有两个选择,要么使用'push_back'
v3.push_back( v1[i] + v2[i] );
或者先将数组调整为给定大小:
v3.resize( v1.size() );
如果你是push_back,最好还是预先分配空间:
v3.reserve( v1.size() );
最后,您可以尝试阅读std::valarray
,因为这些操作已内置于其中!
编辑,是的,正如Johannes所说,你有浮点除法的问题:&gt;
答案 1 :(得分:8)
为了避免遇到明显的陷阱,您可以选择这样做:
#include <algorithm> // for transform
#include <functional> // for plus
std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(v3), std::plus<float>());
答案 2 :(得分:4)
首先,您需要进行浮点除法
v1.push_back(i/10.0f);
v2.push_back(i/100.0f);
然后您需要为i
上的v3
个变量留出空间或使用push_back
v3.push_back(v1[i] + v2[i]);
答案 3 :(得分:1)
v3[i] = v1[i] + v2[i];
您正在分配不存在的元素。请改为v3.push_back(v1[i] + v2[i]);
。
此外,您可能需要i/10.0
而非i/10
,否则您的结果将被舍入。
答案 4 :(得分:1)
你写入v3向量,但你没有为它分配任何空间。
尝试添加:
v3.reserve (v1.size());
在你的第一个和第二个循环之间。
答案 5 :(得分:1)
我认为问题是v3 [i]不起作用,因为向量开始具有零元素。你想做的是:
v3.push_back( v1[i] + v2[i] );
或预先分配载体
v3.resize( v1.size() );
或者最后的解决方案,我会做的是
v3.reserve( v1.size() );
for (i = 0; i < v1.size(); i++) {
v3.push_back( v1[i] + v2[i] );
}
因为这样可以避免一次又一次地调整矢量大小。