C++ 如何通过第0个位置引用解析此向量
我试图从第一个元素的引用解析这个简单数组 这是我的密码:C++ 如何通过第0个位置引用解析此向量,c++,c++11,vector,stl,iterator,C++,C++11,Vector,Stl,Iterator,我试图从第一个元素的引用解析这个简单数组 这是我的密码: #include <iostream> #include <vector> #include <algorithm> int main() { vector<int> vec3 { 1,2,3,4,5}; for( vector<int>::iterator ptr = &vec3[0]; ptr != vec3.end(); ++ptr )
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
vector<int> vec3 { 1,2,3,4,5};
for( vector<int>::iterator ptr = &vec3[0]; ptr != vec3.end(); ++ptr )
{
cout << *ptr << " ";
}
}
#包括
#包括
#包括
int main()
{
向量vec3{1,2,3,4,5};
for(vector::iterator ptr=&vec3[0];ptr!=vec3.end();++ptr)
{
类std::vector的迭代器不是必需的指针(尽管它们可以这样定义,而且类的一些旧实现将其迭代器定义为指针)。它们通常被定义为类
编译器错误表明没有从类型value\u type*
到迭代器类型的隐式转换
所以一般来说,你必须写作
vector<int> vec3 { 1,2,3,4,5};
for( vector<int>::iterator ptr = vec3.begin(); ptr != vec3.end(); ++ptr )
{
cout << *ptr << " ";
}
向量向量3{1,2,3,4,5};
for(vector::iterator ptr=vec3.begin();ptr!=vec3.end();++ptr)
{
如果让vec
成为类型为std::vector
的对象,那么vec.end()
返回一个std::vector::iterator
,它可以不同于相应的原始指针int*
。这样做的原因之一是允许支持调试和错误检查(例如,越界访问)
因此,您必须编写&(*vec.begin())
来获取向量的第一个元素的地址,而不仅仅是vec.begin()
,因为后者不一定返回原始指针
您可以轻松检查&vec[0]
和vec.end()
在您的实现中是否具有相同的类型:
auto a = vec.end();
auto b = &vec[0];
static_assert(std::is_same<decltype(a), decltype(b)>::value, "not same type");
auto a=vec.end();
自动b=&vec[0];
静态断言(std::is_same::value,“非相同类型”);
就我而言:
错误:静态断言失败“类型不同”
静态断言(std::is\u same::value…
你应该做vector::iterator ptr=vec3.begin()
或者,更好的是auto ptr=vec3.begin()
,甚至更好的是:for(auto&el:vec3){cout-mable-dup:You可以,但不能混用。&vec3[a]
不是迭代器。它是int*
。你不能将它与end()比较
或者;您应该执行:for(int*ptr=&vec3[0];ptr!=&vec3[vec3.size()];ptr++)或者类似的操作lines@Mirko从技术上讲,它是一种迭代器……它与vector::iterator
;)不同
vector<int> vec3 { 1,2,3,4,5};
for ( const auto &item : vec3 )
{
cout << item << " ";
}
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec3 { 1, 2, 3, 4, 5 };
for( auto ptr = vec3.data(); ptr != vec3.data() + vec3.size(); ++ptr )
{
std::cout << *ptr << ' ';
}
std::cout << '\n';
return 0;
}
auto a = vec.end();
auto b = &vec[0];
static_assert(std::is_same<decltype(a), decltype(b)>::value, "not same type");