c++ - 是否可以从数组初始化字符串 vector ?如果是这样,如何?

标签 c++ arrays vector instantiation

例如,在 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* .
    注意:我们还应该考虑数组的“结尾”是指向数组中最后一项之后的下一个空格的指针,构造函数将复制除末尾项之外的所有项。
    link
    回答:
    是的,请记住,这里的构造函数采用迭代器,而不是数组的任何项目,因此我们可以轻松地做到这一点,只需稍作改动:
    #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/

    相关文章:

    c++ - SFINAE C++ 方法检查

    javascript - 检查所有数组是否有值且不为空

    java - 使用数组的石材剪程序 Joption

    c++ - 有没有办法使用STL优雅地填充矩阵( vector 的 vector )?

    c++ - 在不占用内存的情况下读取文本文件的最佳方法

    C++ 派生多态类 - 它是否包含 Base 的整个实例,包括 vptr?

    c++ - 动态依赖 lib/tls 搜索路径

    c++ - gcc/g++ 可以在忽略我的寄存器时告诉我吗?

    java - 使用变量初始化整数数组

    c++ - 为什么 vector<int> 在以下情况下比 vector<bool> 快