在一条语句中赋值数组的多个元素(初始化后)


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;
}

这是一个两行代码,但我认为对于原生数组来说,一行代码是不可能的(至少据我所知)。

  1. 用期望的值初始化一个临时数组
  2. 与原始数组交换指针

通过这种方式,您可以对数组使用一行初始化,但仍然可以在设置值之前操作原始数组。

#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";

相关内容

  • 没有找到相关文章

最新更新