如何用一行代码初始化字符串类型的数组?

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 个元素,只需对每个元素执行相同的操作即可。

【讨论】:

以上是关于如何用一行代码初始化字符串类型的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何用数字初始化 char 类型的全局一维数组?

如何用js把字符串转化为整型

Oracle中如何用SQL把字符串转换成整型

如何用Java把date类型转换成long数字?

如何用foreach做数组个数的遍历

如何用sql语句将多行合并成一行