如何使用迭代器迭代2D向量?

时间:2013-08-02 08:51:06

标签: c++ vector stl iterator

所有

我在C ++ STL中使用vector来存储我的数据。我传递它们并将它们从函数中返回。但是,随着数据大小的增加,程序越来越慢。因此,我将代码更新为“迭代器版本”。

我想要的是使用迭代器来传递,返回和迭代STL向量

我现在可以使用一维向量进行操作,就像操纵数组一样。但是,当谈到二维矢量时,我有点困惑。

有人能告诉我如何使用STL迭代器迭代2D矢量的简单代码示例吗?

非常感谢提前。

此致

3 个答案:

答案 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)

你说你的基本问题是表现,对吧? 您认为这是由于复制造成的。 也许可以为您的问题提供更简单的解决方案:

  • 检查向量是否可以通过(const)引用传递
  • 检查shared_ptr是否有意义
  • 考虑移动语义是否有帮助
  • 也许编译器版本或实现会阻止返回值优化

答案 2 :(得分:1)

如果您需要知道向量的大小,并且有两个迭代器it1 it2

std::distance(it1, it2);

会告诉你它们之间的距离。如果它们是beginend

,则会发生这种情况

如果你有像

这样的功能
int work(std::vector<int> items)
{
  //...
}

复制矢量项,因此将使用更多RAM并需要更长时间。 发送const ref不会复制向量。使它const停止你改变它,这可能对你没有帮助,但你没有发布任何代码,所以我不知道你想做什么。

int work(const std::vector<int> & items)
{
  //...
}