gpt4 book ai didi

c++ - 将 vector::iterator 分配给 char 数组后 VS 2003

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:13 25 4
gpt4 key购买 nike

我试图让一些最初用 Microsoft Visual Studio (VS) 2003 编写的 C++ 代码在 VS 2008 下编译,但我无法找到一种有效的解决方案来将 vector::iterator 分配给 char 数组的开头。我知道迭代器从定义为简单指针类型 (T*) 到 VS 2003 和 VS 2005 之间的类类型。这是我正在谈论的一个简单示例:

typedef std::vector<char>       CharContainer;
typedef CharContainer::iterator InputIt;

int FindNumMsgs( InputIt _inputIter, int _len );

int ProcessBufferForMsgs( char buf[], const size_t maxlen )
{
int numMsgs = FindNumMsgs( InputIt(buf), maxlen );
...
}

因此,在 VS 2003 中,它可以毫无问题地编译和工作(因为迭代器被定义为 T*)。在 VS 2008 中,C2440(函数样式转换)出现此错误,因为我不能再只为迭代器分配 buf 指针。既然迭代器是一种类类型,我该怎么做才能让它在 VS 2008 中工作?我可以将缓冲区复制到 vector 中,然后传入 myVec.begin(),但我必须认为我可以避免这种开销。

最佳答案

正确的解决方案是将 FindNumMsgs 模板化,这样它就可以与迭代器或指针一起工作(因为指针可以很好地用作迭代器)。像这样:

template <class T>
int FindNumMsgs(T it, int count) {
while(count--) {
// do whatever
it++;
}
return n;
}

关于c++ - 将 vector::iterator 分配给 char 数组后 VS 2003,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com