std::move()如果在未定义移动构造函数的用户定义对象上调用会发生什么?是简单复制的吗?
我有一个关于如何std::unique_ptr插入a的问题std::vector.想象一下,我有一个生成对象的函数,如下所示:
std::unique_ptr<CObject> createObjects()
{
return std::unique_ptr<CObject> (new CObject());
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中,我有一个std::vector<std::unique_ptr<CObjects>> vec和我插入的元素如下:
vec.push_back(createObjects());
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:unique_ptr移动到矢量中还是复制了?
我在使用新的C++ 11 using关键字时遇到问题.据我所知,它是别名typedef.但我无法编译.我想为a的迭代器定义一个别名std::vector.如果我使用它,一切都很完美.
typedef std::vector<fix_point>::iterator inputIterator;
Run Code Online (Sandbox Code Playgroud)
但如果我尝试:
using std::vector<fix_point>::iterator = inputIterator;
Run Code Online (Sandbox Code Playgroud)
代码不能编译:
Error: 'std::vector<fix_point>' is not a namespace
using std::vector<fix_point>::iterator = inputIterator;
^
Run Code Online (Sandbox Code Playgroud)
为什么不编译?
我有一个包含网站URL的数据库.从那些URL我想提取域名.这是两个(安静的不同)示例:
http://www.example.com -> example.com
example.co.uk/dir/index.html -> example.co.uk
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我使用正则表达式和Oracle提供的函数REGEXP_SUBSTR和REGEXP_REPLACE.我使用replace来替换前面的http[s]和www.用空字符串(删除它).然后我使用substring来获取开头和第一个之间的字符串,/或者如果没有/整个字符串.我的代码看起来像这样:
REGEXP_SUBSTR(REGEXP_REPLACE(website_url, '^http[s]?://(www\.)?|^www\.', '', 1), '(.+?)(/|$)')
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,除了我的正则表达式无法排除/:
example.com/dir/index.html -> example.com/
Run Code Online (Sandbox Code Playgroud)
我想摆脱/.我怎么做?
我在向bool引用转换char引用时遇到问题.我有一个简单的GUI库,具有以下方法gui->addButton(string name, bool& value);.如果单击该按钮,则会翻转bool.现在我想拥有一个动态/未知的按钮.因此,虽然我可以创建一个bool向量,但只需为每个创建的按钮push_back一个新的bool,并为addButton方法提供对最后一个向量元素的引用.像这样的东西:
bool isOnFlag = true;
buttonFlagVector.push_back(isOnFlag);
gui->addButton(name, buttonFlagVector.back());
Run Code Online (Sandbox Code Playgroud)
可悲的是,因为bool的矢量专门化,这是行不通的.
从我读到的,避免bool专业化的常用方法是使用a std::vector<char>.我试过了,我遇到的问题是我不知道如何从char引用转换为bool引用.dynamic_cast reinterpret_cast?他们似乎都没有工作.
有人能指出我正确的方向吗?提前致谢!
我有以下问题.我有一个std::unordered_map包含对象作为值.现在我想修改我之前插入的对象.
class Point
{
public:
Point(float _x, float _y) : x(_x), y(_y) {}
float x;
float y;
};
Run Code Online (Sandbox Code Playgroud)
std::unordered_map<int, Point> points;
// ... add some values to it ...
points[1].x = 20.f; // error?
Run Code Online (Sandbox Code Playgroud)
我得到一个奇怪的长编译错误关于点不能默认构造.我理解它的方式operator []返回对映射类型(也就是值)的引用,那么为什么我不能修改它?
我必须做一些肮脏的伎俩并传递一份std::uint64_t申请。不幸的是我仅限于使用 astd::vector<float>来实现这一点。
据我了解,float大多数平台上都是 32 位的,因此应该可以将 64 位拆分std::uint64_t为两个 32 位整数,将它们表示为float将它们放入向量中,并在另一端反转该过程。
我怎样才能做到这一点?