全部
我在 C++ STL 中使用向量来存储我的数据。我将它们传入和传出函数。然而,随着数据量的增长,程序越来越慢。因此,我将代码更新为“迭代器版本”。
我想要归档的是使用迭代器来传递、返回和迭代 STL 向量。
我现在可以使用一维向量进行操作,就像操作数组一样。但是,当涉及到二维向量时,我有点困惑。
谁能给我看一个简单的代码示例,说明如何使用 STL 迭代器迭代 2D 向量?
提前谢谢了。
问候
长
如果您需要知道向量的大小,并且有两个迭代器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)
{
//...
}
好吧,它已经在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;
}
只能获取同一容器的两个迭代器之间的距离
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;
您说您的基本问题是性能,对吗?您认为这是由于复制造成的。也许可以为您的问题提供更简单的解决方案: