Как изменить std::string?

Я пытаюсь выяснить, как изменить строку temp, когда у меня есть строка, считанная в двоичных числах

istream& operator >>(istream& dat1d, binary& b1)    
{              
    string temp; 

    dat1d >> temp;    
}

Ответ 1

Я не уверен, что вы подразумеваете под строкой, содержащей двоичные числа. Но для изменения строки (или любого STL-совместимого контейнера) вы можете использовать std::reverse(). std::reverse() работает на месте, поэтому сначала вы можете сделать копию строки:

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string foo("foo");
    std::string copy(foo);
    std::cout << foo << '\n' << copy << '\n';

    std::reverse(copy.begin(), copy.end());
    std::cout << foo << '\n' << copy << '\n';
}

Ответ 2

Try

string reversed(temp.rbegin(), temp.rend());

РЕДАКТИРОВАТЬ: разработка в соответствии с запросом.

string::rbegin() и string::rend(), которые означают "обратное начало" и "обратный конец" соответственно, возвращают обратные итераторы в строку. Это объекты, поддерживающие стандартный интерфейс итератора (operator* для разыменования элемента, т.е. Символ строки, и operator++ для перехода к "следующему" элементу), так что rbegin() указывает на последний символ строка rend() указывает на первую, а продвижение итератора перемещает ее к предыдущему символу (это то, что делает его обратным итератором).

Наконец, конструктор, которым мы передаем эти итераторы, является строковым конструктором вида:

template <typename Iterator>
string(Iterator first, Iterator last);

который принимает пару итераторов любого типа, обозначающих диапазон символов, и инициализирует строку этим диапазоном символов.