来自矢量的 int 的流行矢量
Pop vector of int from vector
我有vector<vector<int> > tchSubVec
.
我不明白为什么我不能执行这一行:vector<int>& vec = tchSubVec[i];
.
此外,在tchSubVec[i]
末尾放置.
时,我没有从IDE获得任何建议。
以下是完整的代码:
for(vector<vector<int> >::iterator i = tchSubVec.begin(); i < tchSubVec.end(); i++)
{
cout << "Subjects of teacher " << distance(tchSubVec.begin(), i) << " : n";
vector<int>& vec = tchSubVec[i];
for(vector<int>::iterator j = vec.begin(); j < vec->end(); j++)
{
cout << vec[i] << ", ";
}
}
代码有什么问题?
迭代器和operator[]
之间存在误解。您不能将迭代器与 operator[]
一起使用。要获取迭代器指向的值,您需要使用取消引用运算符 ( operator*
)。
typedef std::vector<std::vector<int> >::iterator iter;
iter begin = tchSubVec.begin();
iter end = tchSubVec.end();
for(iter it = begin; it != end; ++it) {
cout << "Subjects of teacher " << distance(begin, it) << " : n";
vector<int>& vec = *it;
typedef std::vector<int>::iterator iter2;
iter2 end2 = vec.end();
for(iter2 it2 = vec.begin(); it2 != end2; ++it2) {
cout << *it2 << ", ";
}
}
::iterator
与索引不同。不能在 []
运算符中使用迭代器。相反,只需取消引用它。这是有效的,因为迭代器重载了*
运算符。
for(vector<vector<int> >::iterator i = tchSubVec.begin(); i < tchSubVec.end(); i++) {
vector<int>& vec = *i;
}
顺便说一句,如果你可以使用C++11,它大大简化了迭代:
for (auto &vec : tchSubVec) {
/* ... */
}
因为i
是一个vector<vector<int>>::iterator
,而不是一个size_t
(无符号整数)。
使用迭代器:
vector<int>& vec = *i;
/* or just use i directly, like:
for (vector<int>::iterator j = i->begin(); j != i->end(); ++j)
*/
或使用索引:
for (size_t i = 0; i < tchSubVec.size(); ++i) {
vector<int>& vec = tchSubVec[i];
但你不能混合它们。
vector<int>& vec = tchSubVec[i];
您混淆了两个概念:索引寻址和迭代器。 它们是相关的,但不相同,并且不可互换。
i
这里是一个iterator
,它的使用方式类似于指针。 就好像你正在这样做一样:
char** bufs = new char* [256];
for (size_t i = 0; i : 256; ++i)
bufs[i] = new char [1024];
/// ... then ...
for (char** it = bufs; it < bufs+256; ++it)
char* buf = bufs[it];
// ^^^^
请注意,这里it
是一个char**
,而不是一个积分。 您将积分与索引一起使用,而不是指针。
您真正想做的是取消引用迭代器:
vector<int>& vec = *i;
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- 长 长 int 不要 长 int 好
- C++程序在循环后给出奇怪的int值
- 如何计算数据类型的范围,例如int
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 来自矢量的 int 的流行矢量