В основном я написал некоторый код, чтобы напечатать треугольник рекурсивно - и изначально я использовал итератор в коде, чтобы взять внутренние части треугольника и включить их в полное «изображение».Проблема с итераторами
Во всяком случае вот код:
#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]);
}
Мой вопрос в том, почему итераторы не работают в этом контексте.
Возможно, вы получите ответы быстрее, если вы дадите более подробную информацию, чем «этот код не работает». Когда: время компиляции? во время выполнения? Что происходит? –
Совершенно сложное решение для очень простой задачи ... – user231967
BTW: 'std :: string (max_stars, '*')' будет строить строку так, как вы этого хотите. Вы можете сохранить его в переменной 'stars', а затем нажать его на' buffer' до и после рекурсии, так что вам не придется строить его дважды. –