gpt4 book ai didi

C++ vector <'Object' > 返回类型函数实现

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:43 25 4
gpt4 key购买 nike

我有以下程序,如果我在程序的主函数中实现该算法,它就可以正常工作。如果我为我的算法创建另一个函数,我将无法使用它,而且我不知道问题出在哪里。我应该使用一些指针来解决问题吗?有人可以帮我吗?提前致谢!

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;


class Map
{
public:
float x;
float y;
float theta;
};
bool operator<(const Map& x, const Map& y)
{
return x.theta < y.theta;
}

当我在主函数中实现排序和过滤算法时,它工作正常:

int main()
{
Map mapArray[10] = {{1, 5, 1}, {9, 2, -0.8}, {3, 0, -6.5}, {5, 7, -4.3}, {1, -4, -0.99}, {6, 4, -0.66}, {10, 8, 6}, {0, 9, 1.1}, {6, 2, 4}, {3, 5, -0.8}};


vector<Map> resultMap;
int mapSize = (sizeof mapArray / sizeof mapArray[0]);
float piHalf = 1.57;
// Sort the map
std::sort(mapArray + 0, mapArray + mapSize);
// Filter the result
for( int a = 0; a < mapSize; a = a + 1 )
{
if(mapArray[a].theta >-piHalf && mapArray[a].theta<piHalf) {
resultMap.push_back(mapArray[a]);
}
}

// Print each theta-data for test the program
cout << "Data:" << resultMap.size()<<endl;
for( unsigned int i = 0; i < resultMap.size(); i = i + 1 )
{
cout << "Data:" << resultMap[i].theta<<endl;
}
return 0;
}

但是,如果我对我的排序和过滤算法进行操作,整个过程就无法正常工作,结果我得到了一个 0 大小的 vector 。我的功能实现:

vector<Map> sortAndFilterMap(Map mapArray[]) {

// Init variables
vector<Map> resultMap;
int mapSize = (sizeof mapArray / sizeof mapArray[0]);
float piHalf = 1.57;
// Sort the map
std::sort(mapArray + 0, mapArray + mapSize);
// Filter the result
for( int a = 0; a < mapSize; a = a + 1 )
{
if(mapArray[a].theta >-piHalf && mapArray[a].theta<piHalf) {
resultMap.push_back(mapArray[a]);
}
}
return resultMap;
}

我主要是如何使用它的:

int main() {
Map mapArray[10] = {{1, 5, 1}, {9, 2, -0.8}, {3, 0, -6.5}, {5, 7, -4.3}, {1, -4, -0.99}, {6, 4, -0.66}, {10, 8, 6}, {0, 9, 1.1}, {6, 2, 4}, {3, 5, -0.8}};

vector<Map> resultMap;
resultMap = sortAndFilterMap(mapArray);



// Print each theta-data for test the program
cout << "Data:" << resultMap.size()<<endl;
for( unsigned int i = 0; i < resultMap.size(); i = i + 1 )
{
cout << "Data:" << resultMap[i].theta<<endl;
}
return 0;
}

编辑:非常抱歉,我没有很好地解释我的错误。错误如下:如您所见,在 main 函数的末尾,我打印了经过过滤和排序的 map 。在第一个解决方案中,当我在主循环中进行实现时,我打印了预期值。当我创建一个函数时,“theta”值也应该被打印出来,但我什么也没打印出来。在 for 循环之前,我“计算”了 resultMap 的大小,但我得到的是 0,而不是 6。

最佳答案

int mapSize = (sizeof mapArray / sizeof mapArray[0]);

这条线只在极少数情况下有效。直接说你不应该这样做会更容易。将数组的长度作为额外参数传递,你就安全了:

std::vector<Map> sortAndFilterMap(Map mapArray[], int mapSize)

或者,您可以使用 std::vector<Map>到处并一起删除原始数组。

关于C++ vector <'Object' > 返回类型函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28173712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com