gpt4 book ai didi

c++ - 用于查找 STL 容器中间的 STL 样式函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:22 29 4
gpt4 key购买 nike

我是 C++ 的新手,请求帮助解决问题。

我正在编写一个简单的 STL 样式函数,它应该返回序列的中间元素( vector 、列表等)

这是我的函数,我尝试使用迭代器的概念

template <class It, class T> It  middle(It first, It last) 
{

while(first!=last){
++first;
--last;
}
return first;
}

这是我的主要部分,试图调用 middle 来获取一个整数 vector (我省略了包含)

int main() {
vector<int>vi;
int x;
cout<<"Enter vector elemets...";
while (cin>>x)
vi.push_back(x);
cout<<endl;
cin.clear();
cout<<"the vector is:"<<endl;
for(int i=0;i<vi.size();++i)
cout<<vi[i]<<" ";
cout<<endl;
vector<int>::iterator first=vi.begin();
vector<int>::iterator last=vi.end();
vector<int>::iterator ii=middle(first,last);
cout<<"The middle element of the vector is: "<<*ii<<endl;
}

使用 g++ 编译时出现以下错误:

myex21-7.cpp:79: error: no matching function for call to ‘middle(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&)’

有人可以给我一些提示来解决这个问题吗?感谢您提供高级帮助蛇

最佳答案

怎么样:

auto middle = container.begin();
std::advance(middle, container.size()/2);

如果您有可用的 C++11,std::next 可让您在一行而不是两行中执行相同的操作。

另请注意,对于支持随机访问迭代器的容器(例如,std::vectorstd::deque),这将相对有效(常数复杂度而不是线性复杂度)。

关于c++ - 用于查找 STL 容器中间的 STL 样式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504973/

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