假设我们有一个 string_view 和另一个 string_view,它是第一个 string_view 的子集:
using namespace std; // just to shorten the example...
string_view s{"abc def"};
auto t = s.substr(4);
auto u = s.substr(0, 4);
cout << *(s.begin() + 4) << " " << *t.begin() << '\n';
cout << ((s.begin() + 4) == t.begin());
cout << (s.end() == t.end());
cout << ((s.begin() +5) == t.begin());
cout << ((s.begin() +5) == (t.begin() + 1));
cout << ((s.begin() + 4) == u.end()); // true
Run Code Online (Sandbox Code Playgroud)
所有比较都可以在 gcc (9 HEAD) 和 clang …
如何获取元组中元素的数量。这样我就可以做下面的事情。
for(int i=0;i<tuple.count();++i)
cout << std::get<i>(tuple) << endl;
Run Code Online (Sandbox Code Playgroud)
编辑:我的问题是元组大小,而不是迭代它的成员。那是另一个话题了。所以核心点是获取元组大小。迭代是额外的。所以它与您提到的问题不重复。
我正在为一个学校项目处理一些遗留代码,并尝试捕获 std::bind 是否失败。这是项目中当前的代码(不是我写的),它在 VS 2019 中产生“C++ 没有运算符匹配这些操作数”错误。我尝试与 bool 进行比较,这就是它所说的 std::bind 返回到 no有用。
if ( bind( socket, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )
{
printf( "failed to bind socket\n" );
Close();
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果 std::bind 在 if 语句中失败,我还能如何正确捕获?
std::greater当你有课std::pair的时候有用吗int?
我正在尝试创建一个成对的优先级队列,按第一个元素排序:
std::priority_queue<std::pair<double, classA>, std::vector<std::pair<double, classA>>, std::greater<std::pair<double, classA>>> priorityQueue
Run Code Online (Sandbox Code Playgroud)
但我收到一条错误消息
与“运算符<”不匹配
它暗示了 的第二个元素std::pair,它是类类型。
应用于std::greater第一个和第二个元素std::pair?
char* convert()
{
std::string data = "stack\0over\0flow";
return data.c_str();
}
Run Code Online (Sandbox Code Playgroud)
这将返回指针,并且在调用者上从它构建字符串时,它将具有堆栈而不是完整的字符串。在 C++ 11 中是否有解决方法,无需更改输入和返回类型?我想从 char* 重建调用方的整个字符串。
让我们考虑下一个片段:
int val=5;
int& ref=val;
std::atomic<int> atomicref(ref);
++atomicref;
std::cout<< "atomic ref="<<atomicref.load()<<" original ref="<<ref<<" original val="<<val;
Run Code Online (Sandbox Code Playgroud)
当我在 Mac OS X、XCode 8.3.3、c++11 下编译它时,我收到如下输出:
atomic ref=6 original ref=5 original val=5
Run Code Online (Sandbox Code Playgroud)
该行:
std::atomic<int> atomicref(ref);
当然看起来很可疑,因为原子下的类型与变量声明中的类型不同 - 它是引用。
我想知道为什么这些值不匹配;说atomicref实际上创建了val的副本是否正确?
这是代码:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <utility>
struct student
{
std::string full_name;
int group;
int number;
friend std::istream& operator>>(std::istream& in, student& obj)
{
in >> obj.full_name >> obj.group >> obj.number;
return in;
}
friend std::ostream& operator<<(std::ostream& out, const student& obj)
{
out << "Full name: " << obj.full_name << '\n';
out << "Group: " << obj.group << '\n';
out << "Number: " << obj.number << '\n';
return out;
}
bool operator<(const student& obj)
{
return this->number …Run Code Online (Sandbox Code Playgroud) 我在大型代码库中定义了几个数学数字常量。其中几个(但不是全部)现在在新的 C++20<numbers>标头中重复。我想把它们都集中在一处;是否允许扩展std::numbers标头以包含尚未定义的标头?
在堆上分配 std::array 时遇到一些麻烦。
\n这是我尝试过的:
\nstd::array<int,3> *arr1; \narr1 = new std::array<int,3>;\narr1[0] = 1;\nRun Code Online (Sandbox Code Playgroud)\n但是,我得到的错误是:
\n错误:与 \xe2\x80\x98operator*\xe2\x80\x99 不匹配(操作数类型为 \xe2\x80\x98std::array\xe2\x80\x99)。
\n我也尝试过:
\narr1[0][0] = 1;\nRun Code Online (Sandbox Code Playgroud)\n这有效,但也有效:
\narr1[5][5] = 2;\nRun Code Online (Sandbox Code Playgroud)\n这不应该工作,因为 std::array<int, 3> 指示数组大小应该只有 3 个整数。
\n我在这里做错了什么?
\n我在我的 C++ 应用程序中使用 C 库。其中一项功能需要一个null-terminated array of pointers.
由于我使用的是 C++,因此我将数组的元素存储在std::vector.
data()我想知道简单地调用我的向量并将结果传递给库函数是否安全。
示例:
std::vector<struct A *> vec;
//library_function(struct A **array);
library_function(vec.data());
Run Code Online (Sandbox Code Playgroud)
当然,如果我更改向量中的元素,则返回的指针data()将无效,但这不是这里的问题(我可以在更新向量时再次调用该函数)。
我只是担心这可能是未定义的行为,因为我看不到任何提到的data()由空指针而不是随机垃圾终止的地方。
标准确实说:
const T* data() const noexcept;
Returns pointer to the underlying array serving as element storage.
The pointer is such that range [data(); data() + size()) is always a valid range
Run Code Online (Sandbox Code Playgroud)
因此存在一个终止元素,但它没有说明该元素是否已初始化以及如果已初始化,则具有什么值。
是否在其他地方指定了我错过的?
或者我是否必须自己分配一个原始数组并以 null 终止它?
c++ ×10
std ×10
arrays ×1
c++11 ×1
c++17 ×1
c++20 ×1
dynamic ×1
heap-memory ×1
macos ×1
max ×1
min-heap ×1
namespaces ×1
overloading ×1
std-pair ×1
stdatomic ×1
stdvector ×1
string ×1
string-view ×1