在一个数组的结构中保持Point和vector的向量

时间:2016-02-22 11:34:23

标签: c++

我必须遵循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> ptsvector <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个参数的函数

没有收到此错误。
任何人都可以帮我清除它。

4 个答案:

答案 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;
}

希望能让你工作但是你可能会考虑一些时间来研究其他编程技巧。祝你好运:)