I have a question about 'push_back()' with reverse_iterator

68 views Asked by At
#include<string>
#include<iterator>
#include<vector>
#include<iostream>

int main(){

    std::string str = "abc";
    std::string str2 = str;
    std::vector<int>::reverse_iterator rit = str.rbegin();
    for(rit+1; rit != str.rend(); rit++){
        str2.push_back('*rit');
    }
    std::cout << str2 << std::endl;
}

I expected the output to be 'abcba', but there seems to be an error in push_back(). Somebody help me T_T

1

There are 1 answers

2
Vlad from Moscow On BEST ANSWER

For starters there is a typo (or you wanted to highlight the expression)

str2.push_back('*rit');

It seems you mean

str2.push_back( *rit);

This declaration

std::vector<int>::reverse_iterator rit = str.rbegin();

does not make a sense. The declared object and the right expression used as an initializer have different types and there is no implicit conversion between them.

What you need is the following

    std::string str = "abc";
    std::string str2 = str;

    str2.append( str.rbegin(), str.rend() );

    std::cout << str2 << '\n';

Or you could write

    std::string str = "abc";
    std::string str2 = str;

    for (std::string::reverse_iterator it = str.rbegin(); it != str.rend(); ++it)
    {
        str2.push_back( *it );
    }

    std::cout << str2 << '\n';

Or the for loop could be written like

for (auto it = str.rbegin(); it != str.rend(); ++it)