所有
我在C ++ STL中使用vector来存储我的数据。我传递它们并将它们从函数中返回。但是,随着数据大小的增加,程序越来越慢。因此,我将代码更新为“迭代器版本”。
我想要的是使用迭代器来传递,返回和迭代STL向量。
我现在可以使用一维向量进行操作,就像操纵数组一样。但是,当谈到二维矢量时,我有点困惑。
有人能告诉我如何使用STL迭代器迭代2D矢量的简单代码示例吗?
非常感谢提前。
此致
长
答案 0 :(得分:1)
好吧它已经在stackoverflow上的某个地方了
但是如果你不想在这里搜索它是:
std::vector<std::vector<int> > vec{ {1,2,3},{4,5,6}};
//Simplest Way:- (C++11)
for(auto row:vec)
{
for(auto col:row)
std::cout<<col<< " ";
std::cout<<std::endl;
}
//OR Using iterator
std::vector<std::vector<int> >::iterator r;
std::vector<int>::iterator c;
for (r = vec.begin(); r != vec.end(); r++) {
for (c = r->begin(); c != r->end(); c++) {
std::cout<<*c<< " ";
}
std::cout<<std::endl;
}
只能在同一容器的两个迭代器之间获取distance
std::vector<int>::iterator s = v2.begin(); //Can be any start
std::vector<int>::iterator e = v2.end(); // Can be any end
std::cout<<"Distance :"<<std::distance(s,e)<<std::endl;
答案 1 :(得分:1)
你说你的基本问题是表现,对吧? 您认为这是由于复制造成的。 也许可以为您的问题提供更简单的解决方案:
答案 2 :(得分:1)
如果您需要知道向量的大小,并且有两个迭代器it1
it2
,
std::distance(it1, it2);
会告诉你它们之间的距离。如果它们是begin
和end
如果你有像
这样的功能int work(std::vector<int> items)
{
//...
}
此复制矢量项,因此将使用更多RAM并需要更长时间。
发送const ref不会复制向量。使它const
停止你改变它,这可能对你没有帮助,但你没有发布任何代码,所以我不知道你想做什么。
int work(const std::vector<int> & items)
{
//...
}