如何用一行代码初始化字符串类型的数组?
Posted
技术标签:
【中文标题】如何用一行代码初始化字符串类型的数组?【英文标题】:How do I initialize arrays of type string with one line of code? 【发布时间】:2013-05-27 03:39:26 【问题描述】:我声明了一个大小为 100 的数组 string bin[100];
我希望每个数组都初始化为 ""
。如何用一行初始化所有这些?我尝试了bin[] = "";
之类的方法,但它不起作用。任何帮助将不胜感激。
默认构造函数
RandomString()
input = "";
//bin[] = "";
【问题讨论】:
【参考方案1】:你不需要做任何特别的事情,string bin[100];
就可以了。将为数组的每个元素调用std::string
的默认构造函数。
如果数组是某个类的成员,则在成员初始化列表中对其进行初始化:
struct SomeClass
std::string bin[100];
SomeClass() : bin() // You can initialize arrays with () in the mem-init list
;
*从技术上讲,即使您没有将 bin()
添加到 mem-init 列表中,也会调用默认构造函数,但这是一种很好的做法(因为内置类型将保持未初始化状态)。
在 C++ 中,类的成员通过初始化列表进行初始化。比如下面的例子,代码就有区别:
// First example
struct MyClass
int i;
SomeClass() : i(1)
;
// Second example
struct MyClass
int i;
SomeClass()
i = 1;
;
在第一个示例中,i
在初始化列表中被初始化为1
。在第二个示例中,1
被分配给i
。您可以将上述代码视为执行以下操作:
int i = 1; // First example
int i; // Second example
i = 1;
对于像int
这样的内置类型,两者之间没有太大区别,但是在某些情况下,上述区别可能非常重要,例如当成员被声明为const
时:
struct SomeClass
const int i;
SomeClass()
i = 1; // Error!!
;
在上面的例子中,const成员必须在初始化列表中被初始化。
【讨论】:
我会在我的类构造函数中放入什么?既然我声明了string bin[100];
作为我的成员函数,我会在类构造函数中将初始化留空吗?
我希望bin
是一个成员变量而不是一个函数。在ctor的成员初始化列表中对其进行初始化,例如MyClass::MyClass() : bin() //body of ctor
哎呀,我的意思是说成员变量。而且我真的不明白你在说什么关于在ctor列表中初始化它。我该怎么做?我编辑了我的第一篇文章以包括我的构造函数的样子。
@user2419691:您似乎对初始化列表不熟悉。它们是初始化类成员的 C++ 方式。有关更多信息,请参阅this tutorial。在您的代码示例中,它看起来像这样:RandomString() : bin()
.
@AvraamMavridis:someclass(std::string v[100])
与 someclass(std::string* v)
相同。您不能使用指针来初始化成员数组。您可以做的最好的事情是使用 for 循环或其他一些构造(如 std::copy
)将每个元素复制到数组中。【参考方案2】:
以你的方式,你刚刚初始化了数组的第一个元素,默认的ctor初始化为空字符串。您想初始化这 100 个元素,只需对每个元素执行相同的操作即可。
【讨论】:
以上是关于如何用一行代码初始化字符串类型的数组?的主要内容,如果未能解决你的问题,请参考以下文章