String assignment
The easiest way to assign a value to a string is to use the overloaded operator= function. There is also an assign() member function that duplicates some of this functionality.
string& string::operator= (const string& str) string& string::assign (const string& str) string& string::operator= (const char* str) string& string::assign (const char* str) string& string::operator= (char c)
Sample code: Output: One Two Three Four 5 Six Six |
The assign() member function also comes in a few other flavors:
string& string::assign (const string& str, size_type index, size_type len)
Sample code: Output: cdef |
string& string::assign (const char* chars, size_type len)
Sample code: Output: abcd This function is potentially dangerous and its use is not recommended. |
string& string::assign (size_type len, char c)
Sample code: Output: gggg |
Swapping
If you have two strings and want to swap their values, there are two functions both named swap() that you can use.
void string::swap (string& str) void swap (string& str1, string& str2)
Sample code: Output: red blue blue red red blue |
哈哈看来你的头发一定非常“茂密”
W LESSON
Best tutorial ever, I'll be donating a "few" thousand bucks when I get a job. Your effort is immensely appreciated Alex.
Thanks for the kind words. I've "only" been working on this for 16 years! :)
:), awesome stuff
These apply to this and future lessons in this chapter:
Yup, definitely outdated. It's incredible how much the website has improved elsewhere, though!
Why string& string::assign (const char* chars, size_type len) is potentially dangerous?
Please, make a chapter on maps. Learning from your lessons are the most easiest to understand.
I'd like to, but I don't expect to get to it any time soon. :( There are too many other topics that are higher on my priority list right now.
Dear Alex,
With regards to swapping, we learned how to use a, b and temp variable for swapping. However, it is known to be inefficient. There are 2 other methods like arithmetic and bitwise XOR swapping, each with their own limitations. E.g. Arithmetic will overflow if anyone of the numbers are large and XOR'ing same numbers will return 0.
Could you point out the most efficient swapping method that is currently in use?
"_CONSTEXPR20 void swap(_Ty& _Left, _Ty& _Right) noexcept(
is_nothrow_move_constructible_v<_Ty>&& is_nothrow_move_assignable_v<_Ty>) {
_Ty _Tmp = _STD move(_Left);
_Left = _STD move(_Right);
_Right = _STD move(_Tmp);
}"
Hi Alex,
I think there is no difference. At the lowest level, swapping still uses the a,b,c(temp) method. The other methods are unstable and flawed.
hey, I tried to compile and run the following program but why do I get the latest char instead of the first one ?shouldn't it cout the first char it encounters ?
thanks!
Character literals with more than 1 character have an implementation-defined (Differs between compilers) value, don't use them.
This is a question on chapter 15.
Instead of using std::weak_ptr, couldn't you use a normal pointer?