来自prioric++11的std::vector::begin()是否等效于C++11中的std::vector::d
Is std::vector::begin() from priorC++11 equivalent to std::vector::data() in C++11?
以前的C++11
中的std::vector::begin()
等价于C++11中的std::vector::data()
吗?我问这个问题的原因是,在C++11之前,我曾将std::vector::begin()视为指针,但在C++11之后,它就不是了,而且我不能转换为等效的指针。那么,我可以在C++11之后使用data()吗?
否,begin
返回迭代器,而data
返回指针。对于给定的实现,这些可能是相同的,但您不应该指望这一点。
使用迭代器作为指针是完全错误的,因为它是由实现定义的。若您仍然需要在迭代器中指向数据的指针,则应该使用去引用迭代器的地址,如下所示:
std::vector<int> v; v.push_back(42);
std::vector<int>::iterator it = v.begin();
int * p = &*it;
当然,在c++11中,您可以使用.data()
作为指向向量元素的指针。
来自prior-C++11的std::vector::begin()是否等效于C++11中的std::vector::data()?
取决于你所说的等价物是什么意思。取消引用将产生对向量中第一个项的引用,但begin()返回的迭代器不能保证转换为data()所返回的指针类型。
我问这个问题的原因是,在C++11之前,我曾将std::vector::begin()视为指针,但在C++11之后,它就不是了,而且我不能转换为等效的指针。
你的代码经历了好运气(或坏运气),这取决于你如何看待它
那么,我可以在C++11之后使用data()吗?
有两个迭代器对横跨矢量的数据:
begin()
至end()
和
data()
至data() + size()
您可以在任何标准算法中使用任何一种,结果都是一样的。
作为一种好的风格,你应该尽可能使用begin()
到end()
(几乎总是这样)。
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g