std::string mstring[5];
mstring[0] = "veena";
mstring[1] = "guitar";
mstring[2] = "sitar";
mstring[3] = "sarod";
mstring[4] = "mandolin";
I want to assign the array like above. I don't want to do it at initialization but assign later. Is there a way to combine 5 statements into one.
You can do that by using std::array<std::string, 5>
instead of the raw array.
For example
#include <iostream>
#include <string>
#include <array>
int main()
{
std::array<std::string, 5> mstring;
mstring = { "veena", "guitar", "sitar", "sarod", "mandolin" };
for ( const auto &s : mstring )
{
std::cout << s << ' ';
}
std::cout << '\n';
}
The program output is
veena guitar sitar sarod mandolin
Another approach when a raw array is used is to use std::initializer_list
in range-based for loop. For example
#include <iostream>
#include <string>
int main()
{
std::string mstring[5];
size_t i = 0;
for ( auto s : { "veena", "guitar", "sitar", "sarod", "mandolin" } )
{
mstring[i++] = s;
}
for ( const auto &s : mstring )
{
std::cout << s << ' ';
}
std::cout << '\n';
}
The program output is the same as shown above
veena guitar sitar sarod mandolin
If your compiler supports C++ 20 then instead of these statements
size_t i = 0;
for ( auto s : { "veena", "guitar", "sitar", "sarod", "mandolin" } )
{
mstring[i++] = s;
}
you can use just one range-based for loop
for ( size_t i = 0; auto s : { "veena", "guitar", "sitar", "sarod", "mandolin" } )
{
mstring[i++] = s;
}