【问题标题】:arrays/lists and their dimensions数组/列表及其维度
【发布时间】:2013-12-13 06:00:23
【问题描述】:

我在分析以下代码时遇到问题:

 for (int argI = 1; argI < args_.size(); ++argI) //size(): Return the number of 
 {                                       //arguments.
      argListString += ' ';         //Space into string
      argListString += args_[argI]; //new argument into string

      if (args_[argI][0] == '-')    // ????
      {
           const char *optionName = &args_[argI][1];   //????

我的问题是标有???? 的行。当我查找对象args_ 时,它是stringList 类型,而stringListList&lt;T&gt; 的模板类。 List&lt;T&gt; 定义为

Template<class T> 
class Foam::List< T > 
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bounds checking, etc. Storage is allocated on free-store during
construction.

如果args_ 是一维数组,为什么在第 415 行和第 417 行像二维数组一样访问它?

问候 直线

【问题讨论】:

    标签: c++ arrays list


    【解决方案1】:

    它是一个向量/字符串列表。字符串是一系列字符。因此,索引运算符( [] ) 可能会提供对字符串单个字符的访问。

    415 为此检查字符串的第一个字符,417 访问从第二个字符到末尾的子字符串。

    【讨论】:

    • 好的,再问一个问题:使用第 417 行中的运算符 &,我通常应该得到一个对象的地址。那么,我可以在这里得到第二个字符的地址吗?
    • 返回第二个字符的地址。 c 字符串基本上是一个字符数组(将一行中的字符相乘,最后有一个 NULL 字符 ('\0'))。因此,c 字符串char* foo 只不过是指向该数组的一个元素的指针。因此,您始终可以添加偏移量(例如foo + 4)来获取子字符串(因为您只是在该字符序列中向前移动)。我不太确定,他们如何在此处的 [] 运算符中保留与 c 字符串的原始关系,但我的猜测是,他们返回 const char &amp;
    【解决方案2】:

    推测args_[argI]是字符串类型,字符串类型重载[]来访问字符串中的字符。

    所以这会寻找-flibble 形式的选项;第一个标记的行检查参数是否以- 开头,第二个设置optionName 指向flibble

    【讨论】:

      【解决方案3】:

      你有一个一维向量args_,其中每个元素的类型都是T。现在,这种类型T 似乎是一个字符串(字符串类型或指向 C 样式字符串的指针),其元素可以使用索引运算符 [] 访问。

      因此,它实际上并不是“像二维数组一样访问”。取而代之的是,每个项目都作为一维数组进行访问,结果对象反过来被索引。

      因此,假设Tchar*(这对文本字符串有意义),这将使args_[argI] 成为char* 类型的元素,它是指向字符串的指针。然后将该字符串索引为一个数组,以便args_[argsI][1] 引用名为args_ 的向量中argIth 字符串中的第二个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多