找个位置 return 一个迭代器不工作
Find a position and return an iterator doesn't work
template<typename T>
void findposition(T t, long value, typename T::iterator &before, typename T::iterator &position) {
typename T::iterator it = t.begin();
while(it != t.end()) {
before = it;
position = it;
if(*it > value) {
if(before != t.begin()) {
before = --it;
}
break;
}
++it;
}
}
vector<long>::iterator itVectorBefore;
vector<long>::iterator itVectorPosition;
findposition(myVector, 31, itVectorBefore, itVectorPosition);
myVector.insert(itVectorPosition, 31);
我不明白为什么这段代码不起作用。当我 运行 它时,我会得到一个分段错误。另一个 st运行ge 事情是,当 du 调用 findposition(myVector, 1, itVectorBefore, itVectorPosition) 时。两个迭代器的值都为 0。我使用 gdb 进行了调查,但我找不到问题所在,因为之前在函数 findposition 中具有正确的值。
当你们中有人知道我做错了什么时。我很乐意得到解释。
谢谢你的帮助。
当容器为空时,before
和 after
都不会被初始化。
typename T::iterator it = t.begin();
while(it != t.end()) { // When the input is empty, nothing
// is set to before or after.
返回的迭代器在输入参数的副本上。
你应该改变:
template<typename T>
void findposition(T t, long value,
typename T::iterator &before,
typename T::iterator &position) {
到
template<typename T>
void findposition(T& t, long value,
typename T::iterator &before,
typename T::iterator &position) {
template<typename T>
void findposition(T t, long value, typename T::iterator &before, typename T::iterator &position) {
typename T::iterator it = t.begin();
while(it != t.end()) {
before = it;
position = it;
if(*it > value) {
if(before != t.begin()) {
before = --it;
}
break;
}
++it;
}
}
vector<long>::iterator itVectorBefore;
vector<long>::iterator itVectorPosition;
findposition(myVector, 31, itVectorBefore, itVectorPosition);
myVector.insert(itVectorPosition, 31);
我不明白为什么这段代码不起作用。当我 运行 它时,我会得到一个分段错误。另一个 st运行ge 事情是,当 du 调用 findposition(myVector, 1, itVectorBefore, itVectorPosition) 时。两个迭代器的值都为 0。我使用 gdb 进行了调查,但我找不到问题所在,因为之前在函数 findposition 中具有正确的值。
当你们中有人知道我做错了什么时。我很乐意得到解释。
谢谢你的帮助。
当容器为空时,
before
和after
都不会被初始化。typename T::iterator it = t.begin(); while(it != t.end()) { // When the input is empty, nothing // is set to before or after.
返回的迭代器在输入参数的副本上。
你应该改变:
template<typename T> void findposition(T t, long value, typename T::iterator &before, typename T::iterator &position) {
到
template<typename T>
void findposition(T& t, long value,
typename T::iterator &before,
typename T::iterator &position) {