Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从成员的地址获取其索引_C++_C++11_Indexing_Memory Address - Fatal编程技术网

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;i
for(无符号整数i=0;ifor(无符号整数i=0;ifor(无符号整数i=0;ifor(无符号整数i=0;istd::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];