在c ++标准的各个地方,短语:
要求: len
是有效范围。
(其中p是指针,[first, last)
是数字)。
迭代器的替代版本是:
要求: <% @interest = Interest.new(hobby_id: hobby.id, user_id: @user.id) %>
<%= link_to 'Create', new_interest_path, method: :get, class: "btn btn-primary" %>
是有效范围。
这是什么意思?
答案 0 :(得分:2)
我认为C++17
标准的相关部分在这里
27.2.1 一般 [ iterator.requirements.general ]
...
8 迭代器
j
在迭代器i
中被称为 可到达 当且仅当有,表达++i
的有限的应用程序序列i == j
。如果来自j
的{{1}} 可以 ,则它们会引用相同序列的元素。9 在数据结构上运行的大多数库的算法模板都有使用范围的接口。范围是一对指定计算开始和结束的迭代器。范围
i
是一个空范围;通常,范围[i, i)
是指数据结构中的元素,以[i, j)
指向的元素开头,但最多但不包括i
指向的元素。当且仅当j
可以从[i, j)
访问时,范围j
才有效。将函数库中的函数应用于无效范围的结果是未定义的。
因此提取相关部分:
8 迭代器
i
在迭代器j
中被称为 可到达 当且仅当有,表达式i
的有限应用序列,使++i
...9 ...范围
i == j
有效且当且仅当[i, j)
可以j
到达时才有效。
所以似乎有效范围&#34;是一对属于相同容器(或数组)的迭代器,i
比j
更远。
但也不要忘记:
通常,范围
i
是指数据结构中的元素,以[i, j)
指向的元素开头,但最多但不包括i
指向的元素。
所以j
和i
之间的所有迭代器(但不一定包括j
)必须为&#34 ;在数据结构中&#34; (即不是越界)。
答案 1 :(得分:1)
这意味着{this.state.subCatagory.map((subCatagory, idx) => (
<div className="subCatagory" key={idx}>
<input
type="text"
placeholder={`Enter Dish #${idx + 1} name`}
value={subCatagory.name}
onChange={this.handlesubCatagoryNameChange(idx)}
/>
<input
type="number"
placeholder={`subCatagory #${idx + 1} price`}
value={subCatagory.price}
onChange={this.handlesubCatagoryPriceChange(idx)}
/>
<button
type="button"
onClick={this.handleRemovesubCatagory(idx)}
className="small"
>
Delete
</button>
<button type="button" onClick={this.addNewCust(idx)} className="small">
is cust availble?
</button>
{subCatagory.customize.map((gj, idx) => (
<div key={idx}>
<input
type="number"
placeholder={`subCatagory #${idx + 1} price`}
value={gj.name}
onChange={this.gjj(idx)}
/>
</div>
))}
</div>
))}
包含和first
或p+len
完全之间的所有内容都必须有效。
这一切都取决于C ++允许存在数组指针的过去,只要您只使用它们来引用数组的“结尾”而不取消引用它们。
所以,如果我有:
last
然后int my_array[10];
int* first = &my_array[0];
int* last = &my_array[10];
和first
代表有效范围,即使last
在技术上指向无处有效。
同样的原则适用于迭代器,其中容器的last
实际上并不是容器数据的一部分。
乍一看这一切看起来都很奇怪,但这种表示范围的方式允许以理智的方式处理空范围。