首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手入门,关于顺序容器的有关问题

2013-08-10 
新手入门,关于顺序容器的问题不知道下面的代码为什么错误#include iostream#include list#include ve

新手入门,关于顺序容器的问题
不知道下面的代码为什么错误


#include <iostream>
#include <list>
#include <vector>
#include <string>

using namespace std;
int main() {
string words[] = {"stately", "plump", "buck"};
size_t word_size = sizeof(words) / sizeof(string);
list<string> words2(words, words+word_size);
for(list<string>::iterator iter = words2.begin(); iter != words2.end(); iter++)
cout << *iter << endl;
cout << "--------" << endl;
list<string>::iterator mid = words2.begin() + words2.size()/2;
//vector<string> vect(words2.begin(), mid);
//for(vector<string>::iterator iter = vect.begin(); iter != vect.end(); iter++)
//cout << *iter << endl;
return 0;
}
新手入门,关于顺序容器的问题 String Iterator
[解决办法]
list<string>::iterator mid = words2.begin() + words2.size()/2;
----------------------------------------
list的迭代器只能自增自减,不能+ 数字
[解决办法]
引用:
那要取list的中间位置,不会是一个个加过去吧。

list<string>::iterator mid = std::next(words2.begin(), words2.size()/2); (需要c++11)
或者
list<string>::iterator mid = words2.begin();
std::advance(mid, words2.size()/2);

需要包含<iterator>
不管哪种,对于list的迭代器,内部实现实际上就是一个一个加过去的
[解决办法]
引用:
不知道下面的代码为什么错误

#include <iostream>
#include <list>
#include <vector>
#include <string>

using namespace std;
int main() {
string words[] = {"stately", "plump", "buck"};
size_t word_size = sizeof(words) / sizeof(string);


list<string> words2(words, words+word_size);
for(list<string>::iterator iter = words2.begin(); iter != words2.end(); iter++)
cout << *iter << endl;
cout << "--------" << endl;
list<string>::iterator mid = words2.begin() + words2.size()/2;
//vector<string> vect(words2.begin(), mid);
//for(vector<string>::iterator iter = vect.begin(); iter != vect.end(); iter++)
//cout << *iter << endl;
return 0;
}


list就没有提供迭代器+整数的运算,有++运算,可以一个一个++过去
[解决办法]
list是链式结构,不支持+N的需求,也就是说它的迭代器不是随机迭代器。
[解决办法]
楼上说的对,这只是顺序迭代器,不是随机迭代器

热点排行