在我写的应用程序中,我将数据存储在诸如
之类的对象中std::vector<my_struct> db;
我经常需要引用它们的一些元素并使用一个std :: set,我将它们的位置存储在向量中(不会改变)
std::set<int> elements_i_like;
然后,我使用
访问db元素for ( auto it = elements_i_like.begin(); it!=elements_i_like.end(); it++){
db[*it].do_something();
}
我有一个疑问,但是,在性能方面,不是将元素的索引存储在向量中,而是直接引用它们会更好吗?
std::vector<my_struct> db; //where i store the data (edit form original question)
std::set<my_struct&> elements_i_like;//reference to the specific structs, stored in the vector, that i want to iterate on
并做
for( auto it= elements_i_like.begin(); it!=elements_i_like.end(); it++){
(*it).do_something();
}
这样做会有什么缺点吗? 感谢。
答案 0 :(得分:0)
您不能在容器中存储引用,在任何情况下,即使编译器/语言允许,您仍然需要两个解引用来评估每次迭代。
顺便说一句,如果C ++ 11可用,你可以将循环重写为:
for(auto& elem : elements_i_like)
elem.do_something();