结论:指针p指向vector的第0个元素 p = &v[0] 可以使用p[i]继续访问vector的其他元素,见test3,
此外,p = vector.data()的指针与p = &v[0]完全一致,作用都是获取vector第0个元素的地址,std::vector::data() 是 C++ 中的 STL,它返回一个指向内存数组的直接指针,该内存数组由向量内部用于存储其拥有的元素,推荐使用vector.data()
今天看到一种新的写法:p = &v[0],并在后续使用p[i]继续访问vector v的其余元素,没有搜索到解释,自己测试一下
#include <vector>
#include <iostream>
/* 测试目的,指针p0指向vector的第0个元素 p = &v[0]
可以使用p[i]继续访问vector的其他元素,见test3,
p = vector.data()的指针与p = &v[0]完全一致,推荐使用vector.data()
下面代码的输出的数字都相同,但指针的值有所不同 */
using namespace std;
typedef struct Position
{
float x;
float y;
} position_t;
int main()
{
std::vector<position_t> t1;
for(int i=0;i<5;i++)
{
position_t p1;
p1.x = (float)i;
p1.y = (float)(i+1);
t1.push_back(p1);
}
std::cout << "======test1: orig vector=========\n";
for(int i=0;i<t1.size();i++)
{
std::cout << "x: " << t1[i].x << ", y: " << t1[i].y << std::endl;
}
/* 指向vector的指针 */
vector<position_t> * pv;
pv = &t1;
std::cout << "======test2: vector point=========\n";
std::cout << "vector point: " << pv << "\n";
for(int i=0;i<pv->size();i++)
{
std::cout << "x: " << pv->at(i).x << ", y: " << pv->at(i).y << std::endl;
}
/* 指向vector[0]的指针 */
position_t * p0;
p0 = &t1[0];
std::cout << "======test3: vector[0] point=========\n";
std::cout << "vector point: " << p0 << "\n";
for(int i=0;i<t1.size();i++)
{
std::cout << "x: " << p0[i].x << ", y: " << p0[i].y << std::endl;
}
/* 指向vector[0]的指针:vector.data() */
position_t * pd = t1.data();
std::cout << "======test4: vector.data(): vector[0] point=========\n";
std::cout << "vector point: " << pd << "\n";
for(int i=0;i<t1.size();i++)
{
std::cout << "x: " << pd[i].x << ", y: " << pd[i].y << std::endl;
}
}
编译后输出:
g++ test_vector.cpp -o test
./test