迭代器问题

时间:2010-02-19 13:49:41

标签: c++

基本上我写了一些代码来递归打印出一个三角形 - 最初我在代码中使用了一个迭代器来获取三角形的内部部分并将它们包含在完整的“图片”中。

无论如何这里是代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;


vector<string> print_triangle( int max_stars)
{
 vector<string> buffer;

 if( max_stars == 1)
 {
  buffer.push_back("*");
  buffer.push_back("*");
  return buffer;
 }

 //This is the first part of the program that writes the first line of
 //asterisks
 string tmp;
 for( int i = 0; i < max_stars; i++)
 {
  tmp.push_back('*');
 }

 buffer.push_back(tmp);

 //This is the recursive part of the program, which generates the
 //remainder of the triangle pattern  - the inner part.
 vector<string> inner_part;
 inner_part = print_triangle( max_stars - 1);

 vector<string>::iterator iter = inner_part.begin();
          for( ; iter != inner_part.end(); ++iter)
          {
               buffer.push_back(*iter);
          }
 string tmp1;
 for( int i = 0; i < max_stars; i++)
 {
  tmp1.push_back('*');
 }
 buffer.push_back(tmp1);

 return buffer;
}

但是,如果使用以下代码部分替换迭代器,则此代码无效。

 for( int i = 0; i < inner_part.size(); ++i)
 {
  buffer.push_back(inner_part[i]);
 }

我的问题是为什么迭代器不能在这种情况下工作。

2 个答案:

答案 0 :(得分:0)

我知道它是什么。我必须在原始代码中使用iter ++。它适用于两个编译器。这是我之前犯的错误。

答案 1 :(得分:0)

也许试试

#include <string>
#include <vector>

using namespace std;

vector<string> print_triangle( int max_stars)
{
 vector<string> buffer;
 if (max_stars < 1)
   return buffer;

 buffer.reserve(max_stars + 2);

 while (max_stars > 1)
 {
   buffer.push_back(string(max_stars, '*'));
   max_stars--;
 }
 buffer.push_back("*");
 buffer.push_back("*");

 return buffer;
}

没有递归,内存消耗更少,速度更快。如果max_stars&lt;并且不会陷入无限循环1.没有迭代器: - )