- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
theocái này中的回答和 cái này问题,C++ 标准在 § 23.2.1 中声明 kết thúc()
对于所有 STL 容器都具有恒定的时间复杂度。
如果我理解正确的话:
std::forward_list
只知道它的第一个元素,每个列表条目只知道下一个元素。a.begin() == a.end()
对于空容器 Một
kết thúc()
应该是一个指向“容器末尾的一个”的迭代器因此,在对 forward_list
进行一些循环时,我想知道:
在 forward_list 的情况下,end() 如何具有恒定的时间复杂度(即不前进到“结束后的一个”)?
我查看了 forward_list.cpp
并找到了声明
iterator end() _NOEXCEPT
{return iterator(nullptr);}
这对于恒定时间要求是有意义的,但对于对应于上面第 4 点的 - 无可否认的 vage - 规则则不是。
所以还有一些问题:
nullptr
如何符合“最后一个”的定义?MyForwardList
为空,MyForwardList.begin() == MyForwardList.end()
如何为真?kết thúc()
不总是定义为 nullptr
?
câu trả lời hay nhất
Là gì
one past the end
supposed to mean for non-contiguous storage?
这意味着如果你将迭代器递增到最后一个元素,你会得到什么。
How does
nullptr
fit the definition of 'one past the end'?
如果这是将迭代器递增到最后一个元素时得到的结果,那么它符合定义。
How is
MyForwardList.begin() == MyForwardList.end()
true if MyForwardList is empty?
对于一个空列表,它们都返回同样的东西。可能是一个“空”迭代器。
Why isn't
kết thúc()
always defined asnullptr
?
因为有时候这并不是最方便的定义方式,只要你满足要求,你想怎么实现就怎么实现。
这基本上只是一个循环定义。 kết thúc
函数返回您将迭代器带到列表中的最后一个元素并将其递增时得到的任何内容,或者对于空列表,返回相同的内容 bắt đầu
返回。只要所有这些关系都存在,一切都会正常进行,无论您使用什么内部值(value)观或逻辑来保证这些关系。
关于c++ - end() 以何种方式指向非连续容器中的 'one past the end'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767368/
Ai đó có thể giải thích cho tôi một điểm trong chương trình của tôi dưới đây không? Tôi đã viết chương trình bên dưới để hiểu ý nghĩa của int * const * var;
Tôi đang tìm hiểu các con trỏ trong C và vẫn không chắc chắn về một số điều rất cơ bản. Tôi đã nghĩ ra mã mẫu sau: #include int main(void) { int num = 42;
Đoạn mã sau tạo ra cảnh báo: const char * mystr = "\r\nHello"; void send_str(char * str void main(void){ send_str;
Tôi đang cố nâng cấp cmake trên máy Linux của mình. Đây là lệnh tôi sử dụng. Xóa cmake cũ: Sudo apt purge --auto-remove cmake khỏi https://cmake
Tôi đang cố gắng theo dõi giá trị của byte đầu tiên của liên kết với sự trợ giúp của con trỏ char. Tôi cho rằng đầu ra của byte1 phải là ff, nhưng thực tế nó là ffffffff. Hãy sửa tôi nếu tôi sai. #bao gồm #bao gồm #trong
Tôi đang sử dụng Vi điều khiển để thực hiện một số phép đo ADC. Khi tôi cố gắng biên dịch mã sau bằng tối ưu hóa -O2, tôi gặp sự cố, MCU bị kẹt khi hàm PrintVal() có trong mã. Tôi đã thực hiện một số sửa lỗi và nhận thấy rằng khi tôi thêm
#include #include sử dụng không gian tên std; int main () { vector qwerty; qwerty.push_back(5);
Tôi có tệp setup.py đang hoạt động; nó chứa các dòng sau: home = os.environ["HOME"] # home = /home/dr trong máy của tôi;
Mã này #include #include static_assert(std::is_same_v::value_type,volatile int>); trong GCC và clang mới nhất
Tôi có câu hỏi về khai báo chuyển tiếp trong C. Mã typedef struct yhash_s t_yhash;// chuyển tiếp khai báo struct yhash_s { size_t
Tôi muốn trích xuất loại thành viên được trỏ bởi con trỏ thành viên. mẫu void demo(myClass& instance, void* ptr) { instance.*member = *reinter
Tôi đang cố gắng chuyển đổi một đoạn mã C sang Swift 3 bằng con trỏ. Đây là phần có liên quan của mã C. Float32 sampleArray[256] = { // Mảng có giá trị 256 Float
Như bạn có thể biết, VLA có những ưu và nhược điểm và chúng là tùy chọn trong C11. Lý do chính khiến tôi muốn đặt VLA là tùy chọn là: "ngăn xếp có thể phát nổ": int arr[n] /*where
Có gì sai với mã này? Tại sao tôi không thể hủy đăng ký phần tử theo cách tôi đang cố gắng thực hiện. #include typedef struct { giá trị int; nút cấu trúc * trái;
Có cách nào để tạo\trả về một con trỏ tới một biến trong JavaScript không? Ví dụ: trong PHP: function func() {..... return &$result } I
Nếu bạn muốn sử dụng con trỏ tới một phương thức làm tham số, bạn cần nhập phương thức đó dưới dạng hàm của đối tượng, như sau: type TAcceptor = function(filename:string):boolean of objec
Câu hỏi rất đơn giản: Tôi chưa quen với con trỏ thông minh trong C++. Tôi nghĩ rằng tôi có được nội dung sở hữu, nhưng tôi không biết cách truy cập những gì họ thực sự đang trỏ tới. Khi tôi cố gắng sử dụng các hàm/biến thành viên của đối tượng, tôi chỉ nhận được hàm Unique_ptr của lớp, hàm này
Tôi có một điểm mang Góc, hướng la bàn và một api có thể đặt mũi tên theo một hướng nhất định (0 là trên cùng, 90 là bên phải, 180 là dưới cùng, 360 là trên cùng) Nếu tôi muốn mũi tên chỉ vào, tôi sử dụng phương hướng Hình dạng góc
Tôi đang cố gắng tìm cách lấy dữ liệu từ một ô trang tính nằm ở bên trái trang tính hiện tại (bên dưới khay). Tôi biết cách thực hiện các trang tính khác bằng cách gọi =Sheet1!A1 nhưng bây giờ tôi cần một số lời giải thích tốt nhất =Sheet[-1]!A1
Vì vậy, tôi có một vòng lặp for trong MATLAB trong đó vectơ x sẽ được truyền qua một hàm như cos(x).^2 hoặc một lựa chọn khác như sin(x).^2 + 9.*x. Người dùng sẽ chọn cái mình muốn sử dụng trước vòng lặp for
Tôi là một lập trình viên xuất sắc, rất giỏi!