C++ vector.begin() and vector[0]
C++ vector.begin() and vector[0]
为什么这两行打印不同的地址?
vector<int> v1{ 12,2,34 };
printf_s("%d - 0x%pn", v1[0], &v1[0]);
printf_s("%d - 0x%pn",*v1.begin(), v1.begin());
此地址中的值相同,但地址本身不同。这是否意味着同一数组有两个副本?
编辑:在调试模式下,它打印不同的地址,在发布模式下,有相同的地址:)
v1.begin()
返回一个std::vector<int>::iterator
,这不一定是v1[0]
的地址。事实上,尝试使用 printf
打印出来会给我一个警告:
警告:格式">%p"需要类型为">void*"的参数,但参数 3 的类型为"std::vector::iterator">
除非您确定在您的特定标准库实现和当前编译选项中std::vector<int>::iterator
是 int*
的别名,否则比较是没有意义的。
对于矢量对象 v1:
&V[0]
是对象 v1 的第一个元素的地址。
例如,当我们创建一个迭代器时vector<>::iterator iter
iter
本身是另一个对象,如本文档中所述。
迭代器:一个类似指针的对象,可以用++递增, 用 * 取消引用,并使用 != 与另一个迭代器进行比较。
我希望这本参考手册能详细回答您的问题。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- Bjarne Stroustrup Book - Vector and For loop - 将不起作用
- C++ vector.begin() and vector[0]
- Boost mpl::vector and hana
- BOOST_FOREACH and a vector
- vector::push_back and std::move
- Natvis Visual Studio 2012 Boost Vector and Matrix
- vector::erase and reverse_iterator
- c++ mysqlpp::storequeryresult and std::vector
- STL vector: resize() and assign()
- std::vector::emplace_back and std::move
- C++ error: Double and 3d Vector
- Vector and push_back() behavior
- std::vector and std::min behavior
- std::vector and Constructors
- bad_alloc on vector.push() and vector.reserve()
- std::vector vs std::list for insertion frequency and dynamic