如果一个向量只是一个功能更强大的数组,那么就像一个数组一样,它会将基本元素的地址存储在它的名字中吗?为什么我没有得到存储在指定索引位置的元素的值,而是将完整的字符串作为输出? 这是我的代码!
#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;
}
答案 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
的每个成员都是单个字符。