【问题标题】:why dosen't this vector give me the same output as the array?为什么这个向量不给我与数组相同的输出?
【发布时间】:2016-04-01 16:53:48
【问题描述】:

如果向量只是一个功能更强大的数组,那么就像数组一样,它是否将基元素的地址存储在其名称中?为什么我没有得到存储在指定索引位置的元素的值,而是得到了完整的字符串作为输出? 这是我的代码!

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<string> v(20,"hello");
     char a[]={"hello"};

    cout<<v[1]<<"\n"; //this gives hello as the output

    cout<<a[1];       //this gives e


    return 0;
}

【问题讨论】:

  • A std::vector&lt;std::string&gt; 甚至与 char [] 不同,因为它是字符串的集合而不是单个字符串(v 的每个元素都是 std::string a 的每个元素都是char)。
  • vector&lt;string&gt; v(20,"hello"); 您正在创建 20 个 std::strings 并打印第二个。 char a[]={"hello"}; 您正在创建一个字符数组并打印第二个字符。

标签: c++ vector


【解决方案1】:

您在这里定义了完全不同的类型。

vector<string> v(20,"hello");

这会创建一个包含 20 个字符串的向量,每个字符串都初始化为包含“hello”。向量的每个元素都是一个完整的字符串。

char a[]={"hello"};

这会创建一个包含“hello”的(C 风格)字符串。数组的每个元素都是一个字符。

当然,当你要求打印一个字符串时,整个字符串都会被打印出来。同样,当您要求打印单个字符时,会打印出单个字符。

【讨论】:

    【解决方案2】:

    std::vector&lt;string&gt;strings 的容器。因此,第一个元素是整个字符串,第二个元素是另一个整个字符串,依此类推。而char[]characters 的容器。因此,第一个元素是一个字符,第二个元素是另一个字符,依此类推。

    【讨论】:

      【解决方案3】:

      为什么我没有得到存储在指定索引位置的元素的值,而是得到了完整的字符串作为输出?

      因为你在向量中使用字符串类型而不是字符。

      改变

      vector<string> v(20,"hello");
      

      vector<char> v = { 'h', 'e', 'l', 'l', 'o', '\0' };
      

      你会得到'e'。

      【讨论】:

        【解决方案4】:

        v[1] 是 [1] 成员,如果是字符串向量,您已将该成员初始化为“hello”。 a[1] 是a 的[1] 成员,您已将其初始化为'h','e','l','l','o',0

        v 的每个成员都是一个完整的字符串。 a 的每个成员都是单个字符。

        【讨论】:

          猜你喜欢
          • 2019-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-06
          • 2021-04-06
          • 2021-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多