为了制作一份深刻的副本myArr,
vector <Point> myArr;
Run Code Online (Sandbox Code Playgroud)
哪个Point是一个有2个整数的成员,
我需要做一些特别的事吗?或者还可以
vector <Point> otherArr = myArr;
Run Code Online (Sandbox Code Playgroud)
我需要删除一些点,otherArr但同时我需要所有的点以myArr供以后使用.
提前致谢
代码:
for(x=abc.begin();x!=abc.end();x++)
{
if(-----)
{
----
abc.erase(x);
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:::
Dangerous iterator用法
擦除后迭代器无效,因此解除引用或将其与另一个迭代器进行比较无效.
在上面的代码中使用擦除功能的错误用法是什么?
看来我的/usr/include/c++/4.5.1/ext/rope(和ropeimpl.h)中有一个执行绳索.我将它与SGI STL进行了比较,代码似乎与代码库完全相同.
我不知道它的状态或功能与否.我也不知道这是否是超级陈旧的陈旧代码或代码正在进行中
在任何情况下,我都没有找到任何关于如何使用它的参考(如果功能).你知道我错过的东西吗?有可以使用的用法示例吗?
如果我们看看GNU的libstdc ++实现,我注意到在标准类的实现中,各种类的私有成员函数都带有前缀_M_.例如,std::basic_string<>其中一个成员被称为bool _M_is_shared() const;.
我理解为私有成员变量设置某种命名约定的动机.这有助于在视觉上区分类成员和函数局部变量.但我不明白为什么_M_前缀是私有成员函数的首选.
如果我看到一些代码调用的例子:is_shared();基本上只有几个选项:
前两个,都有前缀,所以没有帮助.由于命名空间污染问题,最后一个不会发生在任何理智的实现中.图书馆应该引入的唯一全局变量是标准规定的全局变量.所以这就是问题的症结所在......
由于私人成员职能不公开.无法以任何方式影响派生类.我不认为名称冲突在这里真的是一个问题......基本上这些只不过是一个私有的实现细节.为什么要担心(IMO)丑陋的_M_前缀?标准中有什么东西不允许引入额外的私人成员吗?如果是这样,除非有我遗漏的东西,否则会让我感到愚蠢.
我正在尝试实现一个优先级队列,该队列使用一个具有const成员的对象,该成员用于定义队列中对象的优先级.以下是我正在使用的精简版本
#include <vector>
#include <queue>
class Event {
public:
Event(float _time) : time(_time) {};
const float time;
};
struct EventComp {
public:
bool operator()(const Event& a, const Event& b) const {
return a.time < b.time;
}
};
class EventQueue {
private:
std::priority_queue<Event, std::vector<Event>, EventComp> events;
};
int main(int argc, char *argv[])
{
EventQueue q;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时(使用g ++ -std = c ++ 11),我收到以下错误消息,我不太明白.
g++ -std=c++11 events.cpp -o events
In file included from /usr/include/c++/4.8/queue:62:0,
from events.cpp:2:
/usr/include/c++/4.8/bits/stl_heap.h: In instantiation of ‘void std::__adjust_heap(_RandomAccessIterator, …Run Code Online (Sandbox Code Playgroud) 我正在使用cmake来管理使用第三方库的项目.
该库可以针对libc ++或libstd ++进行编译/链接(具体取决于版本).
我知道如何告诉cmake针对libc ++或libstdc ++编译/链接我的项目,但我不知道如何检查我使用的库是否是针对libc ++或libstd ++编译/链接的.是否有任何cmake命令来检查?
以下程序尝试std::tuple_element为用户定义的类型提供特化foo.不幸的是,clang-3.5用libc ++拒绝它,但是使用其他编译器或使用其他标准库来clang-3.5接受程序.这是对的吗?如果不是,为什么不呢?
#include <utility>
struct foo {};
namespace std
{
template<size_t, class> struct tuple_element;
template<size_t i>
struct tuple_element<i, foo> {};
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器输出:
$ clang-3.5 -std=c++11 -stdlib=libc++ -lc++ test.cpp
test.cpp:11:8: error: explicit specialization of non-template struct 'tuple_element'
struct tuple_element<i, foo> {};
^ ~~~~~~~~
1 error generated.
$ clang-3.5 -std=c++11 -lstdc++ test.cpp
(no error)
$ g++-4.9 -std=c++11 test.cpp
(no error)
Run Code Online (Sandbox Code Playgroud) 最近我看了一下gcc 提供的函数模板的实现.std::not_fn
此函数模板的返回类型是_Not_fn- 包装类模板,它取消包装的可调用对象.
事实证明,_Not_fn构造函数接受一个int未明确使用的附加参数:
template<typename _Fn2>
_Not_fn(_Fn2&& __fn, int)
: _M_fn(std::forward<_Fn2>(__fn)) { }
Run Code Online (Sandbox Code Playgroud)
对构造函数的调用如下所示:
template<typename _Fn>
inline auto not_fn(_Fn&& __fn)
noexcept(std::is_nothrow_constructible<std::decay_t<_Fn>, _Fn&&>::value)
{
return _Not_fn<std::decay_t<_Fn>>{std::forward<_Fn>(__fn), 0}; // <- 0 is passed here
}
Run Code Online (Sandbox Code Playgroud)
题:
这个附加int参数的目的是什么?为什么gcc实现需要它?
我正在尝试建立开放式嵌入式项目。但是它显示了一些错误,例如
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: GLIBCXX_3.4.26 not found
Run Code Online (Sandbox Code Playgroud)
如何在Ubuntu 16.04中安装GLIBCXX_3.4.26?
我的应用程序受到相当严重的数据丢失方式的旧版本libstdc ++中的错误的影响。如何使用或选择正确的库版本的补救措施是已知的,但对部署和构建的更改不可靠。在被自己咬了不止一次之后,我想停止痛苦,并引入运行时检查以获取足够新版本的libstdc ++。在部署无法使用正确版本的情况下,如何访问该版本以显示较大的警告消息。请注意,我需要的次要版本又名随GCC 8。-rpathLD_LIBRARY_PATHlibstdc++.so.6.0.25GLIBCXX_3.4.25