为什么选择这个向量给出与数组相同的输出?

时间:2016-04-01 16:53:48

标签: c++ vector

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

#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;
}

4 个答案:

答案 0 :(得分:6)

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

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

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

char a[]={"hello"};

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

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

答案 1 :(得分:3)

std::vector<string>strings的容器。因此,第一个元素是整个字符串,第二个元素是另一个整个字符串,依此类推。虽然char[]characters的容器。因此,第一个元素是一个字符,第二个元素是另一个字符,依此类推。

答案 2 :(得分:1)

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

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

变化

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

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

你会得到'e'。

答案 3 :(得分:1)

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

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