Arp*_*pit 1 c++ linux g++ vector
我想在下面添加两个向量是代码片段: -
#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;
}
Run Code Online (Sandbox Code Playgroud)
该程序在第18行崩溃.在我看来,我需要为+操作执行运算符重载.请帮忙.
为了避免遇到明显的陷阱,您可以选择这样做:
#include <algorithm> // for transform
#include <functional> // for plus
std::transform(v1.begin(), v1.end(), v2.begin(), std::back_inserter(v3), std::plus<float>());
Run Code Online (Sandbox Code Playgroud)
参考:https://en.cppreference.com/w/cpp/algorithm/transform
这行不起作用,因为没有v3[i]分配:
v3[i] = v1[i] + v2[i];
Run Code Online (Sandbox Code Playgroud)
你有两个选择,要么使用'push_back'
v3.push_back( v1[i] + v2[i] );
Run Code Online (Sandbox Code Playgroud)
或者手动将数组调整为给定大小:
v3.resize( v1.size() );
Run Code Online (Sandbox Code Playgroud)
如果你是push_back,那么无论如何都要预先分配空间:
v3.reserve( v1.size() );
Run Code Online (Sandbox Code Playgroud)
最后,您可以尝试阅读std::valarray,因为这些操作已经内置于其中!
编辑:是的,正如Johannes所说,你有浮点除法的问题:>
首先你需要进行浮点除法
v1.push_back(i/10.0f);
v2.push_back(i/100.0f);
Run Code Online (Sandbox Code Playgroud)
然后你需要有i变量的空间v3或使用push_back
v3.push_back(v1[i] + v2[i]);
Run Code Online (Sandbox Code Playgroud)