std::具有两个输入参数的矢量构造函数
std::vector constructor with two input arguments
我在我的一个项目中遇到了一段C++代码,它初始化了一个具有两个输入的向量。
其中一个输入是现有数组,另一个是相同的数组加上数组长度。
我在另一个网站上发现了一段类似的代码:
// Create an array of string objects
std::string arr[] = {"first", "sec", "third", "fourth"};
// Initialize vector with a string array
std::vector<std::string> vecOfStr(arr, arr + sizeof(arr)/sizeof(std::string));
for(std::string str : vecOfStr)
std::cout << str << std::endl;
有人可以解释一下arr + sizeof(arr)/sizeof(std::string)
是什么吗?
引用此代码的网站说这是使用的相应构造函数:
vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
arr
本身属于std::string[4]
类型。当传递给函数时,它会衰减为指向第一个元素的指针。在表达式arr + sizeof(arr)/sizeof(std::string)
中,arr
的第一次出现再次衰减。第二个不是。 因此,sizeof(arr)/sizeof(std::string)
计算结果为4
哪个是数组范围。然后,整个表达式arr + sizeof(arr)/sizeof(std::string)
计算结果为指向arr
中最后一个元素过去的位置的指针。这通常称为场外迭代器。这有效地调用了构造函数vector(InputIterator first, InputIterator last, ...)
其中InputIterator
是用std::string*
实例化的。
这里最重要的事情可能是你需要了解发生了什么,std::string[]
可以隐式转换为std::string*
(指向数组中第一个元素的指针(。
所以在你的例子中arr + sizeof(arr)/sizeof(std::string)
是一个指针,指向数组末尾的一个指针(sizeof(arr)/sizeof(std::string)
给出数组中元素的数量(。
所以传递给vector
构造函数的两个元素是指针,它可以充当迭代器,并用arr
中的四个元素初始化vector
。
- 将输入参数作为右值引用传递?
- 是否可以在命令行中将输入参数传递给可执行文件
- 用户输入作为参数C++
- C++基于输入参数的动态代码生成
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 如何使用输入参数作为文件的传递?
- 如何设置默认参数以防用户不输入另一个参数
- C++ 如何根据作为输入传递的参数调用一个构造函数或另一个构造函数?
- 在未显式传递参数时默认使用 lambda 的用户输入
- 在函数中使用运算符重载,在 c++ 中使用 const 类型输入参数
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 如何使输入文本文件成为构造函数参数?c++
- 函数的函数无法识别输入参数
- C++ Catch 是否有类似 NUnit 的测试用例的东西,具有多个参数/输入选项
- 具体参数输入
- 为什么在参数输入之前将计算放置在代码中时,计算不起作用
- C 函数通过指针通过参考与参数输入参数
- 将命令行参数输入文件传递给要分析的类
- 将命令作为参数输入到另一个应用程序