std::string mstring[5];
mstring[0] = "veena";
mstring[1] = "guitar";
mstring[2] = "sitar";
mstring[3] = "sarod";
mstring[4] = "mandolin";
我想像上面那样给数组赋值。我不想在初始化时做,而是稍后赋值。有没有办法把5个语句合并成一个。
您可以通过使用std::array<std::string, 5>
而不是原始数组来做到这一点。
例如
#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';
}
程序输出为
veena guitar sitar sarod mandolin
使用原始数组时的另一种方法是在基于范围的for循环中使用std::initializer_list
。例如
#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';
}
程序输出与上面所示相同
veena guitar sitar sarod mandolin
如果你的编译器支持c++ 20,那么不要用这些语句
size_t i = 0;
for ( auto s : { "veena", "guitar", "sitar", "sarod", "mandolin" } )
{
mstring[i++] = s;
}
你只能使用一个基于范围的for循环
for ( size_t i = 0; auto s : { "veena", "guitar", "sitar", "sarod", "mandolin" } )
{
mstring[i++] = s;
}
这是一个两行代码,但我认为对于原生数组来说,一行代码是不可能的(至少据我所知)。
- 用期望的值初始化一个临时数组
- 与原始数组交换指针
通过这种方式,您可以对数组使用一行初始化,但仍然可以在设置值之前操作原始数组。
#include <string>
#include <iostream>
int main(){
std::string mystring[5];
std::string tmp[5] = {"veena","guitar","sitar", "sarod", "mandolin"};
std::swap(mystring, tmp);
for(auto& s : mystring) std::cout << s << std::endl;
return 0;
}
可以使用逗号操作符将多个表达式组合成一个语句。
mstring[0] = "veena",
mstring[1] = "guitar",
mstring[2] = "sitar",
mstring[3] = "sarod",
mstring[4] = "mandolin";