提问人:lorem1213 提问时间:7/16/2022 最后编辑:Vlad from Moscowlorem1213 更新时间:7/16/2022 访问量:502
在一个语句中分配数组的多个元素(初始化后)
Assigning multiple elements of array in one statement(after initialization)
问:
std::string mstring[5];
mstring[0] = "veena";
mstring[1] = "guitar";
mstring[2] = "sitar";
mstring[3] = "sarod";
mstring[4] = "mandolin";
我想像上面一样分配数组。我不想在初始化时这样做,而是稍后分配。有没有办法将 5 个语句合二为一。
答:
-1赞
MikeCAT
7/16/2022
#1
您可以使用逗号运算符将多个表达式合并为一个语句。
mstring[0] = "veena",
mstring[1] = "guitar",
mstring[2] = "sitar",
mstring[3] = "sarod",
mstring[4] = "mandolin";
评论
0赞
BoP
7/16/2022
+1 最佳滥用规则。现在它是一个语句,根据需要,(但不幸的是仍然是 5 行)。
0赞
MikeCAT
7/16/2022
@BoP 删除换行符以使其成为单行。
1赞
Vlad from Moscow
7/16/2022
#2
您可以通过使用代替原始数组来做到这一点。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;
}
评论
2赞
Vlad from Moscow
7/16/2022
@AnoopRana OP 甚至不知道 std::array。所以这些信息对他很有用。
1赞
user12002570
7/16/2022
如果是这样,您可以编辑重复列表,而不是重新打开问题。有很多重复的,涵盖了如何评估 std::array 或如何使用 std::array 以及它们相对于内置数组的优势。
0赞
Vlad from Moscow
7/16/2022
@AnoopRana 找到重复项对我来说并不有趣。
1赞
Vlad from Moscow
7/16/2022
@AnoopRana这是我第一次回答这样的问题。如果我要搜索重复项,我会忘记C++我自己:)我需要练习:)
1赞
Vlad from Moscow
7/16/2022
@AnoopRana 他是一个初学者。你应该考虑到这一点。此外,我还展示了如何使用原始数组来完成它。这在 C 语言中是无法完成的。你应该对初学者的问题投赞成票。
1赞
RawkFist
7/16/2022
#3
这是一个双行,但我认为单行对于本机阵列是不可能的(至少据我所知)。
- 使用所需值初始化临时数组
- 使用原始数组交换指针
这样,您可以对数组使用单行初始化,但仍然可以在设置值之前操作原始数组。
#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;
}
评论
C
{ }
std:array
{ ...some code...; std::string mystring[] = {"a","b","c","d","e"}; ...code using mystring...}