2012-01-02 76 views
0

我不能在网上找到,所以我最有可能在任何地方这是不是解决问题的正确方法,但也许:矢量 - 存储值的返回部分?

我得到了一类具有值一个 ,我将这两个存储在一个集体向量中。有没有办法只能从矢量内访问价值A?或者我需要为这些值创建单独的向量?

有人想看看我的代码的一部分,所以在这里:

class Read{ 
    friend ostream &operator<<(ostream &,const Read &); 
    public: 
     Read(char,float,float,float); 
     ~Read(); 
    private: 
     char objekt_; 
     float x_, y_, r_; 
}; 

int main(){ 
    vector<Read> v_read; 

    while(fin >> objekt >> x >> y >> r){ 
     v_read.push_back(Read(objekt, x, y, r)); 
    } 

    return 0; 
} 

出从向量我想访问向量的每个部分我objekt_值。

+1

矢量的每个成员都是单个值。如果这个值是你的类,那么你可以访问它的内部。如果这个值是A或B--那么它就是A或B.可能你可以在代码片段中显示你的意思? – littleadv 2012-01-02 04:21:51

回答

1

鉴于在我们可以做的事情,如结构两件事struct个向量:

#include <vector> 
#include <algorithm> 
#include <boost/bind.hpp> 
#include <iterator> 
#include <iostream> 

struct test { 
    int a; 
    double b; 
}; 

int main() { 
    std::vector<test> vec = {{0, 0.1}, {1, 0.2}}; 

    // Copy the a's to another iterator 
    std::transform(vec.begin(), vec.end(), 
       std::ostream_iterator<int>(std::cout, "\n"), 
       boost::bind(&test::a,_1)); 

    // and the b's to another iterator 
    std::transform(vec.begin(), vec.end(), 
       std::ostream_iterator<double>(std::cout, "\n"), 
       boost::bind(&test::b,_1)); 

    // or just copy them into another vector 
    std::vector<int> veca; 
    veca.reserve(vec.size()); 
    std::transform(vec.begin(),vec.end(), 
       std::back_inserter(veca), 
       boost::bind(&test::a,_1)); 
} 

若要在给定std::vector所有条目的每个结构中的一部分工作。

1

如果A和B值存储在向量的不同部分中,则可以使用一对迭代器来指示要处理的范围。很像开始和结束给你的整个向量的范围。