C+中的函数顺序+; 我是C++新手。我的程序中有三个函数。 第一个与python中的np.linspace的工作原理相同。后两个函数都接受一个2d向量,一个整数并返回一个2d向量。 这是我的密码: #include <iostream> #include <cmath> #include <vector> using namespace std; vector<float> linspace(float start, float end, int step); vector< vector<float> > angleDisc(vector < vector<float> > data, int theta_loc); vector< vector<float> > ringDisc(vector < vector<float> > data, int r_loc); const float R_M = 18, RESO_R = 80; const float RESO_THETA = 60; const float PI = 3.14159; const vector<float> DIS_R = linspace(0, R_M, RESO_R); const vector<float> DIS_THETA = linspace(0, PI/2, RESO_THETA); int main() { vector < vector<float> > inner = {{0.1, 0.000001},{1,-2},{-2,3},{1,3},{6,1},{4,-4},{1,3.2},{4,5.7}}; vector< vector<float> > angled = angleDisc(inner, 0); //vector< vector<float> > ringd = ringDisc(inner, 0); for(int j = 0; j < angled.size(); j++){ for(int i = 0; i < 2; i++){ cout << angled[j][i] << " "; } cout << "next" << endl; return 0; } vector<float> linspace(float start, float end, int step){ vector<float> stairs; float increment = (end - start) / step; for (int i = 0; i <= step; i++){ stairs.push_back(i * increment); } return stairs; } vector< vector<float> > angleDisc(vector < vector<float> > data, int theta_loc){ vector< vector < vector<float> > > pieced_disc( DIS_THETA.size() ); float angle; for (int i = 0; i <= DIS_THETA.size() - 1; i++){ for (int k = 0; k <= data.size() - 1; k++){ angle = abs( atan( data[k][1] / data[k][0])); if ( (angle > DIS_THETA[i]) && (angle <= DIS_THETA[i+1]) ){ pieced_disc[i].push_back(data[k]); data.erase(data.begin() + k - 1 ); } } } return pieced_disc[theta_loc]; } vector< vector<float> > ringDisc(vector < vector<float> > data, int r_loc){ vector< vector < vector<float> > > ringed_disc( DIS_R.size() ); float r; for (int i = 0; i <= DIS_R.size() - 1; i++){ for (int k = 0; k <= data.size() - 1; k++){ r = sqrt(pow(data[k][0], 2) + pow(data[k][1], 2)); if ( (r > DIS_R[i]) && (r < DIS_R[i+1]) ){ ringed_disc[i].push_back(data[k]); data.erase(data.begin() + k - 1 ); } } } return ringed_disc[r_loc]; } #包括 #包括 #包括 使用名称空间std; 向量linspace(浮点开始、浮点结束、整数步长); 向量angleDisc(向量数据,int theta_loc); 向量环盘(向量数据,int r_loc); 常数浮点数R_M=18,分辨率R=80; 常数浮点分辨率=60; 常数浮点PI=3.14159; 常数向量DIS_R=linspace(0,R_M,RESO_R); 常数向量DIS_θ=linspace(0,PI/2,分辨率); int main(){ 向量内部={0.1,0.000001},{1,-2},{2,3},{1,3},{6,1},{4,-4},{1,3.2},{4,5.7}; 向量角度=角度圆盘(内部,0); //向量ringd=ringDisc(内部,0); 对于(int j=0;j
在主函数中。代码仍然可以成功编译,但执行对象文件不会返回任何内容,我必须按“Control+C”退出 我试过: 1) 翻转函数angleDisc()和ringDisc()的顺序,在本例中,首先执行的ringDisc()可以在主函数中打印结果,但angleDisc不能 2) 让ringDisc()与angleDisc完全相同,但只是函数名不同,这一次,两个函数都可以正常工作C+中的函数顺序+; 我是C++新手。我的程序中有三个函数。 第一个与python中的np.linspace的工作原理相同。后两个函数都接受一个2d向量,一个整数并返回一个2d向量。 这是我的密码: #include <iostream> #include <cmath> #include <vector> using namespace std; vector<float> linspace(float start, float end, int step); vector< vector<float> > angleDisc(vector < vector<float> > data, int theta_loc); vector< vector<float> > ringDisc(vector < vector<float> > data, int r_loc); const float R_M = 18, RESO_R = 80; const float RESO_THETA = 60; const float PI = 3.14159; const vector<float> DIS_R = linspace(0, R_M, RESO_R); const vector<float> DIS_THETA = linspace(0, PI/2, RESO_THETA); int main() { vector < vector<float> > inner = {{0.1, 0.000001},{1,-2},{-2,3},{1,3},{6,1},{4,-4},{1,3.2},{4,5.7}}; vector< vector<float> > angled = angleDisc(inner, 0); //vector< vector<float> > ringd = ringDisc(inner, 0); for(int j = 0; j < angled.size(); j++){ for(int i = 0; i < 2; i++){ cout << angled[j][i] << " "; } cout << "next" << endl; return 0; } vector<float> linspace(float start, float end, int step){ vector<float> stairs; float increment = (end - start) / step; for (int i = 0; i <= step; i++){ stairs.push_back(i * increment); } return stairs; } vector< vector<float> > angleDisc(vector < vector<float> > data, int theta_loc){ vector< vector < vector<float> > > pieced_disc( DIS_THETA.size() ); float angle; for (int i = 0; i <= DIS_THETA.size() - 1; i++){ for (int k = 0; k <= data.size() - 1; k++){ angle = abs( atan( data[k][1] / data[k][0])); if ( (angle > DIS_THETA[i]) && (angle <= DIS_THETA[i+1]) ){ pieced_disc[i].push_back(data[k]); data.erase(data.begin() + k - 1 ); } } } return pieced_disc[theta_loc]; } vector< vector<float> > ringDisc(vector < vector<float> > data, int r_loc){ vector< vector < vector<float> > > ringed_disc( DIS_R.size() ); float r; for (int i = 0; i <= DIS_R.size() - 1; i++){ for (int k = 0; k <= data.size() - 1; k++){ r = sqrt(pow(data[k][0], 2) + pow(data[k][1], 2)); if ( (r > DIS_R[i]) && (r < DIS_R[i+1]) ){ ringed_disc[i].push_back(data[k]); data.erase(data.begin() + k - 1 ); } } } return ringed_disc[r_loc]; } #包括 #包括 #包括 使用名称空间std; 向量linspace(浮点开始、浮点结束、整数步长); 向量angleDisc(向量数据,int theta_loc); 向量环盘(向量数据,int r_loc); 常数浮点数R_M=18,分辨率R=80; 常数浮点分辨率=60; 常数浮点PI=3.14159; 常数向量DIS_R=linspace(0,R_M,RESO_R); 常数向量DIS_θ=linspace(0,PI/2,分辨率); int main(){ 向量内部={0.1,0.000001},{1,-2},{2,3},{1,3},{6,1},{4,-4},{1,3.2},{4,5.7}; 向量角度=角度圆盘(内部,0); //向量ringd=ringDisc(内部,0); 对于(int j=0;j,c++,function,c++11,vector,C++,Function,C++11,Vector,在主函数中。代码仍然可以成功编译,但执行对象文件不会返回任何内容,我必须按“Control+C”退出 我试过: 1) 翻转函数angleDisc()和ringDisc()的顺序,在本例中,首先执行的ringDisc()可以在主函数中打印结果,但angleDisc不能 2) 让ringDisc()与angleDisc完全相同,但只是函数名不同,这一次,两个函数都可以正常工作 我真的很困惑,有人能帮我吗?您正在修改函数中的向量数据,但您已经将其作为传递值传递给了函数。相反,您应该将其作为传递引用传递
我真的很困惑,有人能帮我吗?您正在修改函数中的向量数据,但您已经将其作为传递值传递给了函数。相反,您应该将其作为传递引用传递给函数 。 我想这是正确的
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
vector<float> linspace(float start, float end, int step);
vector< vector<float> > angleDisc(vector < vector<float> > &data, int theta_loc);
vector< vector<float> > ringDisc(vector < vector<float> > &data, int r_loc);
const float R_M = 18, RESO_R = 80;
const float RESO_THETA = 60;
const float PI = 3.14159;
const vector<float> DIS_R = linspace(0, R_M, RESO_R);
const vector<float> DIS_THETA = linspace(0, PI/2, RESO_THETA);
vector<float> linspace(float start, float end, int step){
vector<float> stairs;
float increment = (end - start) / step;
for (int i = 0; i <= step; i++){
stairs.push_back(i * increment);
}
return stairs;
}
vector< vector<float> > angleDisc(vector < vector<float> > &data, int theta_loc){
vector< vector < vector<float> > > pieced_disc( DIS_THETA.size() );
float angle;
for (int i = 0; i < DIS_THETA.size(); i++){
for (int k = 0; k < data.size(); k++){
angle = abs(atan( data[k][1] / data[k][0]));
cout<<"angle: "<<angle<<"\n";
if ( (angle > DIS_THETA[i]) && (angle <= DIS_THETA[i+1]) ){
pieced_disc[i].push_back(data[k]);
data.erase(data.begin() + k);
}
}
}
return pieced_disc[theta_loc];
}
vector< vector<float> > ringDisc(vector < vector<float> > &data, int r_loc){
vector< vector < vector<float> > > ringed_disc( DIS_R.size() );
float r;
for (int i = 0; i < DIS_R.size(); i++){
for (int k = 0; k < data.size(); k++){
r = sqrt(pow(data[k][0], 2) + pow(data[k][1], 2));
if ( (r > DIS_R[i]) && (r < DIS_R[i+1]) ){
ringed_disc[i].push_back(data[k]);
data.erase(data.begin() + k);
}
}
}
return ringed_disc[r_loc];
}
int main() {
vector < vector<float> > inner = {{0.1, 0.000001},{1,-2},{-2,3},{1,3},{6,1},{4,-4},{1,3.2},{4,5.7}};
vector< vector<float> > angled = angleDisc(inner, 0);
vector< vector<float> > ringd = ringDisc(inner, 0);
for(int j = 0; j < angled.size(); j++){
for(int i = 0; i < 2; i++){
cout << angled[j][i] << " ";
}
cout << "next" << endl;
return 0;
}
for(int j = 0; j < ringd.size(); j++){
for(int i = 0; i < 2; i++){
cout << ringd[j][i] << " ";
}
cout << "next" << endl;
return 0;
}
}
#包括
#包括
#包括
使用名称空间std;
向量linspace(浮点开始、浮点结束、整数步长);
向量角度盘(向量数据,int theta\u loc);
vectorringDisc(vector和数据,int r_loc);
常数浮点数R_M=18,分辨率R=80;
常数浮点分辨率=60;
常数浮点PI=3.14159;
常数向量DIS_R=linspace(0,R_M,RESO_R);
常数向量DIS_θ=linspace(0,PI/2,分辨率);
向量linspace(浮点开始、浮点结束、整数步长){
向量楼梯;
浮动增量=(结束-开始)/步长;
对于(int i=0;i角度盘(向量&数据,intθ位置){
vector>分片光盘(DIS_THETA.size());
浮动角;
对于(int i=0;i角度=角度圆盘(内部,0);
向量ringd=ringDisc(内部,0);
对于(int j=0;jk==0
)您尝试
data.erase(data.begin() - 1);
当i==DIS\R.size()-1
时,再次尝试
DIS_R[i+1]
为什么在迭代过程中要从
数据中删除元素呢?这只会导致访问一半的元素您是否尝试用调试器调试代码?旁白:i旁白:与其说是两个元素向量
,不如说结构点{float x;float y;float angle()const;float distance()const;}
?你想在这里做什么?我想你是想找到某个角度或大小范围内的所有点。例如,也许他们希望对数据的副本进行操作。嗯,这可能是原因之一。你能更详细地解释一下吗?你所说的未定义的行为是什么意思?未定义的行为意味着编译器允许用任何东西代替你的程序我删除了擦除了,然后代码就开始工作了。我想删除的原因是我想在知道这些点在哪个单元格中后去掉它们。
DIS_R[i+1]