例如,在 GeeksForGeeks.org 上,贡献用户“Kartik”提供了以下用于初始化整数 vector 的示例:
// CPP program to initialize a vector from
// an array.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = { 10, 20, 30 };
int n = sizeof(arr) / sizeof(arr[0]);
vector<int> vect(arr, arr + n);
for (int x : vect)
cout << x << " ";
return 0;
}
如果我理解正确阅读的内容,sizeof(arr)
是一些数字(我假设它是数组的长度 arr
;即 3,如果我错了,请纠正我)除以 sizeof(arr[0])
(我假设它是 1)——基本上只是一种说 3/1 = 3 的迂回方式。此时,
vector<int> vect(arr, arr + n)
似乎是一个大小为 3 的 vector ,所有值都初始化为 arr + n
(我假设这是一种说法:“使用 arr
中的 3 个项目来实例化;同样,如果我错了,请纠正我)。通过任何巫术,输出都是
10 20 30
.现在,无论我上面的任何杂乱无章是否连贯甚至远程正确,我的主要问题是:是否可以使用相同的技术来实例化一些示例
vector<string> stringVector
这样它就会遍历一些示例指定的字符串 string stringArray[] = { "wordA", "wordB", "wordC" }
?因为,据我所知,字符串没有数值,所以我想只说 vector<string> stringVector(stringArray, stringArray + n)
会很困难。没有遇到一些时髦的垃圾。那么,如果可能的话,人们将如何去做呢?作为骑手,为什么 ,或者在什么类型的情况下,有人想为 vector 做这个吗?从数组(据我所知它具有恒定大小)实例化它是否会破坏 vector 的目的?
免责声明,我是 C++ 的新手,而且很多面向对象的语法都涉及
std::vector<_Ty, _Alloc>::vector
之类的东西。 ...等等。对我来说完全没有意义,所以我可能需要在答案中解释。感谢阅读本文的人,感谢您抽出宝贵时间。我希望你过得愉快!
最佳答案
说明:
sizeof(arr)
: 返回数组的字节大小,它是 12,因为它有 3 int
s 和每个 int
在大多数实现中,大小为 4 个字节,因此 3 个字节 x 4 = 12 个字节。 sizeof(arr[0])
: 返回数组第一个元素的字节大小,它是 4 因为它是一个 int
大批。 vector<int> vect(arr, arr + n)
: vector 类有 multiple constructors .在这里,我们没有使用您正在考虑的构造函数。我们正在使用一个构造函数,它接受一系列元素的开始和结束迭代器,制作这些元素的拷贝。指针可以用作迭代器,在这种情况下 arr
是开始迭代器和 arr + n
是结束迭代器。 注:
int* + int
返回 int*
.注意:我们还应该考虑数组的“结尾”是指向数组中最后一项之后的下一个空格的指针,构造函数将复制除末尾项之外的所有项。
回答:
是的,请记住,这里的构造函数采用迭代器,而不是数组的任何项目,因此我们可以轻松地做到这一点,只需稍作改动:
#include <bits/stdc++.h>
using namespace std;
int main()
{
// changed int to string and the array values
string arr[] = { "one", "two", "three" };
int n = sizeof(arr) / sizeof(arr[0]);
// changed int to string
vector<string> vect(arr, arr + n);
// changed int to string
for (string x : vect)
cout << x << " ";
return 0;
}
关于c++ - 是否可以从数组初始化字符串 vector ?如果是这样,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65570935/