擅长:python、mysql、java
<p>在Python中,在列表大小之外的索引处插入是非常宽容的,实现检查插入位置是否大于或等于<code>len(list)</code>,然后插入新项。在C++的^ {< CD2> }中,情况并非如此。你得自己检查一下。你知道吗</p>
<pre><code>auto offset = 0;
for(auto x : indexes){
if(x < vec.size()) //Is the selected index in range?
vec.insert(vec.begin() + x, offset++);
else
vec.insert(vec.end(), offset++);
}
</code></pre>
<hr/>
<p>完整示例:</p>
<pre><code>std::vector<int> indexes = {1, 1, 2, 2, 3, 3, 5};
std::vector<int> vec;
auto offset = 0;
for(auto x : indexes){
auto iter = (x < int(vec.size())) ? vec.begin() + x : vec.end();
vec.insert(iter, offset++);
}
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
</code></pre>
<hr/>
<p>输出(如Coliru直播所示):</p>
<pre><code>0 1 3 5 4 6 2
</code></pre>