我必须遵循Point和int类型的结构,
struct PointValue{ Point p; int c; };
在下面的代码中,我可以手动保留点数和值。
PointValue const data[] =
{
{ { 19, 187 }, 119 },
{ { 20, 21 }, 255 },
{ { 20, 92 }, 255 },
{ { 22, 190 }, 39 },
{ { 23, 184 }, 39 },
}
可是... 我想从向量中获取点和值并输入可变数据。
编辑.......
例如
我有vector <Point> pts
和vector <int> ptsVal;
我想将所有点及其相应的值保存到一个数组中,就像上面示例中的数据一样。
但是,我做了这个小测试
PointValue const data[5] {};
for (int i = 0; i < pts.size(); i++) {
data { { {pts[i].y, pts[i].x}, ptsVal[i]} };
}
错误: 错误C2064:术语不评估为采用1个参数的函数
没有收到此错误。
任何人都可以帮我清除它。
答案 0 :(得分:2)
试试这个:
std::vector<Point> pts;
std::vector<int> ptsVal;
std::vector<PointValue> data;
data.reserve(pts.size());
for (int i = 0; i < (int)pts.size(); ++i)
data.push_back({pts[i], ptsVal[i] });
或者,如果您更喜欢数组而不是向量:
struct PointValue data[2];
for (int i = 0; i < 2; ++i)
data[i] = {pts[i], ptsVal[i]};
答案 1 :(得分:0)
确保你有一个构造函数:
struct point{
point(int x, int y) : x(x), y(y){}
int x,y;
};
试试这段代码:
std::vector<PointValue> merge (const std::vector<int>& my_ints,const std::vector<point>& my_points){
//ASSERT my_ints.size()==my_points.size()
std::vector<PointValue> result;
result.reserve(my_ints.size());
for(auto it1=my_ints.begin(),it2=my_points.begin();it1!=my_ints.end();++it1,++it2){
result.emplace_back(*it1,*it2)
}
}
您可以稍微优化for loop
。
答案 2 :(得分:0)
这取决于'Point'类。如果定义如下:
struct Point{
int x,y;
};
或者像这样:
struct Point{
Point(int p, int q) : x(p), y(q){}
int getX() const { return x; }
int getY() const { return y; }
private:
int x,y;
};
也就是说,如果公共构造函数采用两个整数,那么它应该可以工作。我在gcc 4.8中运行它并且它工作得很好。但是,如果没有办法从两个整数公开构造Point
那么该方法将不起作用
答案 3 :(得分:0)
行。那么在这种情况下这是一个有效的解决方案。 但是我不推荐这种类型的编码只是为了让你工作。
#include <iostream>
#include <vector>
using namespace std;
struct Point{
int x,y;
};
struct PointValue{ Point p; int c; };
PointValue const data[] =
{
{ { 19, 187 }, 119 },
{ { 20, 21 }, 255 },
{ { 20, 92 }, 255 },
{ { 22, 190 }, 39 },
{ { 23, 184 }, 39 }
};
int main(int, char**){
vector<PointValue> pts(5);
for(int i = 0; i < 5; ++i)
pts[i] = (PointValue){ {1,2}, 3};
for(int i = 0; i < 5; ++i)
cout << "pts[" << i << "] = { {" << pts[i].p.x << ", " << pts[i].p.y << "} " << pts[i].c << "}\n";
return 0;
}
希望能让你工作但是你可能会考虑一些时间来研究其他编程技巧。祝你好运:)