通过它们之间的迭代器获得开始(VEC)/结束(VEC)

时间:2016-08-28 03:06:23

标签: c++ vector iterator

如果我们得到一些不清楚的迭代器,我们可以得到vector的实际地址或该向量的begin()/ end()

vector<int> VEC1 (20);
vector<int> :: iterator it1 = VEC1.begin()+3;

vector<int> VEC2 (30);
vector<int> :: iterator it2 = VEC2.begin()+8;

vector<int> :: iterator it3 = (/**/)? it1 : it2 ;

// now, we are not clearly know what vector which it 3 refer
// this part can i do this ?, need something like that
vector<int> :: iterator it4 = begin( vector that it3 point to )   
vector<int> :: iterator it4 =   end( vector that it3 point to )

// Q : have any function which can do like last to line of code
谢谢你的天才。

希望你能编辑我的问题,我很难安排我的话。

//

我能得到(新迭代器)引用向量的开头(某些迭代器)指向

1 个答案:

答案 0 :(得分:0)

不存在正常和通用的解决方案。不同的容器使用其项目的不同分配器。但是,您可以声明指向容器的指针并在决定它时存储它3

vector<int> VEC1 (20);
vector<int> :: iterator it1 = VEC1.begin()+3;

vector<int> VEC2 (30);
vector<int> :: iterator it2 = VEC2.begin()+8;

vector<int> *pVEC = NULL;
vector<int> ::iterator it3;

if (condition)
{
    it3 = it1;
    pVEC = &VEC1;
}
else
{
    it3 = it2;
    pVEC = &VEC2;
}

vector<int> ::iterator it4 = pVEC->begin();
vector<int> ::iterator it5 = pVEC->end();

您仍然不知道您正在使用的容器的上下文,但操作与it3,it4和it5现在是安全,因为它们可以保证引用一个容器。