C++ 从成员的地址获取其索引
是否可以通过知道容器中成员的地址来获取其索引?下面是描述所需内容的代码C++ 从成员的地址获取其索引,c++,c++11,indexing,memory-address,C++,C++11,Indexing,Memory Address,是否可以通过知道容器中成员的地址来获取其索引?下面是描述所需内容的代码 #include <iostream> #include <vector> #include <functional> using namespace std; struct Point {}; struct Triangle { vector<reference_wrapper<Point>> p; }; int main() { vecto
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
struct Point {};
struct Triangle
{
vector<reference_wrapper<Point>> p;
};
int main()
{
vector<Point> p (3);
Triangle t;
t.p.push_back (ref(p[0]));
t.p.push_back (ref(p[1]));
t.p.push_back (ref(p[2]));
// push_back order may be random
for (unsigned int i=0; i<t.p.size(); ++i)
{
// print index of t.p.get() in vector<Point>p
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
结构点{};
结构三角形
{
向量p;
};
int main()
{
载体p(3);
三角形t;
t、 p.推回(参考文献(p[0]);
t、 p.推回(参考文献(p[1]);
t、 p.推回(参考文献(p[2]);
//推回顺序可能是随机的
for(无符号整数i=0;ifor(无符号整数i=0;ifor(无符号整数i=0;ifor(无符号整数i=0;ifor(无符号整数i=0;i std::cout如果数组开始于内存位置x
,则可以获得如下索引:和(t.p[i])-x
如果数组开始于内存位置x
,则可以获得如下索引:和(t.p[i])-x)
如果数组开始于内存位置x
,那么您可以像这样获得索引:&(t.p[i])-x)
如果数组开始于内存位置x
,那么您可以像这样获得索引:和(t.p[i])-x
如果您有一个内存连续容器(std::basic_string
、std::vector
和std::array
在标准库中),那么是的,如果有指向元素的引用或指针,以及指向容器第一个元素的引用或指针,则可以获取元素的索引
std::vector<X> v;
...
X* xp = &v[100];
auto index = xp - &v[0]; // index == 100
std::vector v;
...
X*xp=&v[100];
自动索引=xp-&v[0];//索引==100
否则,如果容器不连续,或者您没有访问容器的第一个元素的权限,则不可以。如果您有内存连续容器(std::basic_string
,std::vector
和std::array
,在标准库中),那么是的,如果您有指向元素的引用或指针,以及指向容器的第一个元素的引用或指针,则可以获取元素的索引
std::vector<X> v;
...
X* xp = &v[100];
auto index = xp - &v[0]; // index == 100
std::vector v;
...
X*xp=&v[100];
自动索引=xp-&v[0];//索引==100
否则,如果容器不连续,或者您没有访问容器的第一个元素的权限,则不可以。如果您有内存连续容器(std::basic_string
,std::vector
和std::array
,在标准库中),那么是的,如果您有指向元素的引用或指针,以及指向容器的第一个元素的引用或指针,则可以获取元素的索引
std::vector<X> v;
...
X* xp = &v[100];
auto index = xp - &v[0]; // index == 100
std::vector v;
...
X*xp=&v[100];
自动索引=xp-&v[0];//索引==100
否则,如果容器不连续,或者您没有访问容器的第一个元素的权限,则不可以。如果您有内存连续容器(std::basic_string
,std::vector
和std::array
,在标准库中),那么是的,如果您有指向元素的引用或指针,以及指向容器的第一个元素的引用或指针,则可以获取元素的索引
std::vector<X> v;
...
X* xp = &v[100];
auto index = xp - &v[0]; // index == 100
std::vector v;
...
X*xp=&v[100];
自动索引=xp-&v[0];//索引==100
否则,如果容器不连续,或者您没有访问容器的第一个元素的权限,则不可以。vector在内部是一个数组,因此您可以使用它
int index = &t.p.get() - &p[0];
vector
在内部是一个数组,因此您可以使用它
int index = &t.p.get() - &p[0];
vector
在内部是一个数组,因此您可以使用它
int index = &t.p.get() - &p[0];
vector
在内部是一个数组,因此您可以使用它
int index = &t.p.get() - &p[0];