std::basic_string::assign
От: yuriyb  
Дата: 07.09.07 23:30
Оценка:
Всем привет ! Наступил на грабли... Имеем строку 35 символом... Соответственно последний индекс в буффере = 34... Делаем assign из этой строки, причем начинаем с 35-го символа. На мой взгляд должен генерится out_of_range... Кто как думает по этому поводу ?

Пример:
std::string str = "Hello World !";
std::string target;
target.assign(str, 13, 2);

std::cout << target << std::endl;


Возможно я не допонимаю концепт STL strings ... киньте ссылки где почитать...
Re: std::basic_string::assign
От: Sharp Eye Россия  
Дата: 08.09.07 07:32
Оценка: +1
Здравствуйте, yuriyb, Вы писали:

Y>Всем привет ! Наступил на грабли... Имеем строку 35 символом... Соответственно последний индекс в буффере = 34... Делаем assign из этой строки, причем начинаем с 35-го символа. На мой взгляд должен генерится out_of_range... Кто как думает по этому поводу ?


Y>Пример:

Y>
Y>std::string str = "Hello World !";
Y>std::string target;
Y>target.assign(str, 13, 2);

Y>std::cout << target << std::endl;
Y>


Y>Возможно я не допонимаю концепт STL strings ... киньте ссылки где почитать...


21.3.5.3 basic_string::assign

basic_string<charT,traits,Allocator>&
assign(const basic_string<charT,traits>& str);

1 Returns: assign(str, 0, npos).

basic_string<charT,traits,Allocator>&
assign(const basic_string<charT,traits>& str, size_type pos,
size_type n);

2 Requires: pos <= str.size()

3 Throws: out_of_range if pos > str.size().

4 Effects: Determines the effective length rlen of the string to assign as the smaller of n and
str.size() — pos.
The function then replaces the string controlled by *this with a string of length rlen whose elements
are a copy of the string controlled by str beginning at position pos.

5 Returns: *this

Re: std::basic_string::assign
От: Roman Odaisky Украина  
Дата: 08.09.07 09:11
Оценка:
Здравствуйте, yuriyb, Вы писали:

Y>Возможно я не допонимаю концепт STL strings ... киньте ссылки где почитать...


std::string("abc").substr(0) == "abc"
std::string("abc").substr(1) == "bc"
std::string("abc").substr(2) == "c"
std::string("abc").substr(3) == ""
std::string("abc").substr(4) == oops

Это же логично, что substr(2, 1) оканчивается там же, где и substr(3, 0)?
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.