I write this
std::vector<std::vector<int>> v;
v.rbegin()->push_back({});
And IDE says there is no push_back
. On top of that, there are no members at all, and have no idea why.
Includes:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>
#include <iterator>
No suggestions for members of std::reverse_iterator
P.S. Use Clion 2018.3 and Bazel
UPD: Just tried to build the project using CMake. It works! But what can be wrong with Bazel?
BUILD:
cc_binary(
name = "main",
srcs = ["main.cpp"],
data = ["open_text.txt"],
)
WORKSPACE is empty.
答案 0 :(得分:2)
S。您有两个问题,而您所关心的并不完全清楚。
CLion无法显示std::reverse_iterator<...>
方法。
不知道,您真的依赖于此吗? 您知道有documentation。
无论end()
还是rend()
迭代器都是不可引用的,因此它们实际上并未指向任何东西。因此,即使您的迭代器指向的 type 具有此方法,也将调用它是非法的,因为那里没有对象。
您可以将元素附加到外部向量的最后一个条目上,例如
v.back().push_back({});
如果这就是您想要的。但是,最后提醒一下,end()
和rend()
方法会返回可能无法取消引用的单端迭代器。不要那样做。
答案 1 :(得分:2)
因此,您正在使用CLion IDE和Bazel构建系统,并且C ++代码中没有自动完成功能。当您切换到CMake构建系统时,自动补全功能起作用。
每the Bazel documentation,它们用于自动完成的CLion集成在 beta 中。点击only Java and Python are listed as supported languages(通过CLion部分下的链接)进入他们的IntelliJ文档。
因此,尚不支持。
您可以要求该项目的开发团队进行确认,以及有关Bazel for CLion中何时可能提供C ++支持的信息。
顺便说一句,您的代码中有一个错误:rbegin()
在向量为空时不应该被取消引用。尽管希望该片段只是说明。
答案 2 :(得分:0)
将反向迭代器返回到反向端返回一个反向迭代器 指向第一个元素之前的理论元素 向量(被认为是其反向末端)。
vector :: rbegin和vector :: rend之间的范围包含所有 向量的元素(顺序相反)。
第一个元素之前的理论元素->不应取消引用。它没有指向元素。
我的猜测是您想做:
v.back()->push_back({});
考虑到v
不为空。例如,如果v.push_back({})
为空,则应该这样做。
就IDE而言,应该是配置问题。我主要在Eclipse上工作,通常可以解决此问题:
设置编译器设置以匹配cmake的设置(例如,默认情况下,C ++项目未启用c ++ 11,因此应确保其具有-std = c ++在IDE的编译器设置上为11)。
重新扫描所有包含项。
通常,您可以尝试查看是否无法识别某些内容(例如,对vector关键字进行下划线)。当您按ctrl键并单击vector时,您会看到IDE使用的是哪个标头以及它使用的是哪个代码(可能有一些ifdef和一些未激活,例如__cppversion> = 201103L或类似的意思是IDE认为您没有使用C ++ 11编译器。