c++ - 您可以将指针传递给 std::vector 的迭代器吗

标签 c++ qt vector c++98

我遇到了下面的代码,它在我脑海中提出了一些问题

std::vector<unsigned char> buf(bytes.constData(), bytes.constData() + bytes.size());

其中 bytes 是 QByteArray 并且 bytes.constData() 返回 const char*

我查看了 vector here 的构造函数我认为唯一符合此描述的构造函数是

 vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());

现在我的问题是:

1-是否可以将指针传递给 vector 的迭代器?为什么是 bytes.constData() + bytes.size() ?例如,如果我们稍后对字节进行更改,这是否会生成一个拷贝,它会影响 buf 吗?

最佳答案

“vector 的迭代器”在这里被误导了:所讨论的 vector 构造函数是一个模板并接受任何迭代器。这就是重点——您可以从任何可迭代范围构造容器。

指针确实是迭代器。事实上,迭代器的整个概念基本上是“指针”概念的概括。

vector 构造函数从输入范围复制数据,因此以后对 bytes 的更改不会影响 vector 。

关于c++ - 您可以将指针传递给 std::vector 的迭代器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310984/

相关文章:

c++ - 具有相同名称的纯虚函数的不同实现

c++ - 自动为 C++ 函数添加函数前缀

qt - 从命令行构建 QML 应用程序(没有 Qt Creator)

c++ - 递归类定义会在C++中产生无效的指针

c++ - 在openCV中访问特定图像中所有像素的RGB值

c++ - 如何避免鼠标单击一个小部件触发 Qt 中其他小部件的信号?

c++ - 如何确定 Windows 7 x64 上的应用程序文件路径?

C++编译错误:expected initializer before ‘<’ token

c++ - 遍历 vector 列 C++

python - 从文本中提取单热向量