是否可以从数组初始化字符串向量?如果是这样,怎么办?

尼古拉斯·贾里基(Nicholas Jarecki)

因此,例如,在GeeksForGeeks.org上,贡献用户“ Kartik”提供了以下示例来初始化整数向量:

// 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的向量,所有值都初始化为arr + n(我假设这是一种说法,“使用3项从arr进行实例化;同样,如果我错了,请更正我)”。

通过任何魔术,输出为10 20 30

现在,无论我上面的杂乱无章是连贯的,还是遥远的正确,我的主要问题是:可以使用相同的技术来实例化某些示例vector<string> stringVector,以便它可以通过示例指定的字符串进行迭代string stringArray[] = { "wordA", "wordB", "wordC" }吗?因为据我了解,字符串没有数字值,所以我想如果vector<string> stringVector(stringArray, stringArray + n)不遇到一些时髦的垃圾就很难说出来因此,如果有可能,人们将如何去做呢?

作为骑手,为什么或在哪种类型的情况下,任何人都想对矢量进行此操作?从数组实例化它(据我所知,它具有恒定的大小)是否违反了矢量的目的?

就像免责声明一样,我是C ++的新手,并且涉及std::vector<_Ty, _Alloc>::vector... etc之类的很多面向对象的语法对我来说绝对没有意义,所以我可能需要在答案中进行解释。

对于阅读此书的人,谢谢您抽出宝贵的时间。希望您过得愉快!

用户名

sizeof(arr)

sizeof获取对象的大小(以字节为单位)对象的大小是该对象所需的字节总数。请注意,我在C ++上下文中使用“对象” ,而不是OOP上下文(类的实例)。

给定类型的对象的大小始终相同。std::string包含”"a"的大小与string包含“战争与和平”未删节文本的包含大小相同任何看起来具有可变大小的对象实际上都包含对存储在其他位置的可变长度数据的引用。std::string最基本的情况下,它是指向动态分配的数组的指针,并且是一个整数,用于跟踪实际使用了多少动态分配的数组stringstd::vector类似,通常是指向其数据开头的指针,指向其数据结尾的指针和指向数据中第一个空位置的指针。无论有多大vectorsizeof(vector)都将返回指针的大小,以及其他任何簿记变量vector实现,以及确保正确对齐内存所需的任何填充

这意味着数组中的每个项目始终具有相同的大小,因此彼此之间的距离也相同。

通过任何巫术...

上面的意思是数组的总大小除以数组中一个元素的大小sizeof(arr) / sizeof(arr[0]),将始终提供数组中元素的数量。数组包含什么(数字或其他形式)都没有关系。当然有更漂亮的方式,例如

template <class T, size_t N>
size_t getsize (const T (&array)[N])
{
    return N;
}

然后

size_t n = getsize(arr);

作为骑手,为什么或在哪种类型的情况下,任何人都想对矢量进行此操作?

在过去,人们无法直接构建vector预先加载的数据。没有人愿意写任意数量的行push_back来手动敲打所有值。​​这太无聊了,程序员几乎总是有更好的事情要做,并且注入错误的几率太大。但是,您可以轻松轻松地格式化数组并将其输入vector,如果需要的话vector很多时候,由于内容不变,或者最糟糕的是,内容只会被改组,因此您可以独自依靠数组生存。

但是,如果内容的数量可以改变,那可能是时候了vector如果您要添加项目而又不知道上限,那么该是了vector如果您要调用需要一个的API vector,那么该时候该了了vector

我不能代表所有人,但是我将假设像我一样,很多人都希望对vectors,lists,maps和其他普通黑帮进行简单的数组式初始化

我们被迫编写生成适当代码的程序来填充vector或定义一个数组,然后将该数组复制到vector上面的示例中。

在C ++ 11我们得到了我们的愿望std::initialzer_list和各种新的初始化选项1,允许

vector<string> vect{"abc","def","ghi"};

消除了大多数情况下您会发现自己将数组复制到库容器中的情况。群众欢欣鼓舞。

这与诸如之类的许多工具不谋而合std::sizestd::begin并且std::end可以将数组转换成vector蛋糕。假设您没有先将数组传递给函数

1不幸的是,初始化选项列表可能会让您感到困惑

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

VS 2013中“ Zither字符串”的颜色是否表示某些东西?如果是这样,该怎么办?

是否可以将使用stringify转换为字符串的JSON保存为计算机上的文件?如果是这样怎么办?

是否可以从这样的方法中获得反向输出?如果是这样怎么办?

是否可以获取当前版本中包含的补丁?如果是这样,怎么办?

是否可以在循环中的每个方法之后检查条件?如果是这样,怎么办?

是否可以让Ant打印出特定目标的类路径?如果是这样,怎么办?

Xamarin.Android中的ImageButton是否可以使用SVG?如果是这样,怎么办?

是否可以在Tkinter下拉菜单中输入用户文本?如果是这样,怎么办?

是否可以从vba更改MS Project选项菜单中的设置?如果是这样,怎么办?

是否可以在TextCtrl上绘制?如果是这样,怎么办?

是否可以在Android上开发自定义API?如果是这样,怎么办?

是否可以更新系统映像备份?如果是这样怎么办?

类应该在初始化时转换参数的类型吗?如果是这样,怎么办?

Laravel:验证失败时,是否可以使用{{old('file')}}值?如果是这样,怎么办?

连接到MySQL时是否可以用Groovy创建数据库?如果是这样,怎么办?

是否可以在不使用Heroku Toolbelt的情况下部署Rails应用程序?如果是这样,怎么办?

是否可以依次逐个启动各种物联网边缘模块?如果是这样,该怎么办?

是否可以制作可重复使用的代码以添加背景图像?如果是这样,怎么办?

是否可以根据客户端的互联网速度加载不同的网页?如果是这样怎么办?

InstallShield LE-是否可以创建一个纯Web安装项目。如果是这样,怎么办?

是否可以在处理中消除未描边的多边形之间的空间?如果是这样,怎么办?

可以实施检查HintDb的Coq策略吗?如果是这样,怎么办?

我可以在bash的文件路径中使用变量吗?如果是这样,怎么办?

我可以在Ubuntu GNOME上安装Cinnamon DE吗?如果是这样,怎么办?

我可以扩大Mac EFI分区吗?如果是这样怎么办?

Clojure是否允许行继续?如果是这样,怎么办?

我是否需要向Azure Databricks添加ODBC连接?如果是这样,怎么办?

是否需要取消分配AutoreleasingUnsafeMutablePointer?如果是这样,怎么办?

magento中的哈希密码功能是否已更改?如果是这样,该怎么办?