我有一个简单的问题。如果我的类有vector
个其他类对象,并且我想访问其中一个对象中的方法但不使用[]
运算符,那么我该怎么做呢?我有这样的代码:
#include <iostream>
#include <vector>
class Sample
{
int label;
std::vector<int> int_vector;
public:
int getLabel()
{
return label;
}
void writeDown()
{
int i=0;
for(auto it=int_vector.begin(); it!=int_vector.end();it++,i++)
{
std::cout<<(*it)<<std::endl;
}
}
Sample(int label, int tab[10])
{
int i=0;
this->label=label;
for(int i=0; i<10; i++)
{
int_vector.push_back(tab[i]);
}
}
~Sample()
{
std::cout<<"Object has been removed"<<std::endl;
}
};
class Dataset
{
public:
std::vector<Sample *> vectorOfSamples;
Dataset(Sample *sample)
{
vectorOfSamples.push_back(sample);
}
};
int main(int argc, char** argv)
{
int tab[10] = {1,2,3,4,5,6,7,8,9,10};
Sample sample(5,tab);
Dataset dataset(&sample);
for (int i=0; i<5; i++)
{
dataset.vectorOfSamples.push_back(new Sample(i, tab));
}
for (auto it=dataset.vectorOfSamples.begin(); it!=dataset.vectorOfSamples.end(); it++)
{
std::cout<<it.getLabel()<<std::endl;
}
return 0;
}
当我这样做时,g++
给了我这个:
将其更改为it->getLabel()
会给我这个:
我怎样才能让它发挥作用?
答案 0 :(得分:2)
for (auto it=dataset.vectorOfSamples.begin(); it!=dataset.vectorOfSamples.end(); it++)
{
std::cout<<(*it)->getLabel()<<std::endl;
}
你必须取消引用你的迭代器。