-4

全部

我在 C++ STL 中使用向量来存储我的数据。我将它们传入和传出函数。然而,随着数据量的增长,程序越来越慢。因此,我将代码更新为“迭代器版本”。

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

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

谁能给我看一个简单的代码示例,说明如何使用 STL 迭代器迭代 2D 向量

提前谢谢了。

问候

4

3 回答 3

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)
{
  //...
}
于 2013-08-02T09:41:09.323 回答
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;
}

只能获取同一容器的两个迭代器之间的距离

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;
于 2013-08-02T09:23:20.150 回答
1

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

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