dai*_*yue 54 c++ stl insert vector visual-c++
我想将一个元素插入到向量的特定位置,我可以使用一个赋值:
// vec1 and 2 have the same length & filled in somehow
vec1;
vec2;
vec1[i] = vec2[i] // insert vec2[i] at position i of vec1
Run Code Online (Sandbox Code Playgroud)
或者我必须使用insert():
vector<sometype>::iterator iterator = vec1.begin();
vec1.insert(iterator+(i+1), vec2[i]);
Run Code Online (Sandbox Code Playgroud)
Arm*_*yan 100
vec1[i] = vec2[i]
Run Code Online (Sandbox Code Playgroud)
将设置的值vec1[i]
,它的值vec2[i]
.什么都没插入.你的第二种方法几乎是正确的.而不是+i+1
你需要的+i
v1.insert(v1.begin()+i, v2[i])
Run Code Online (Sandbox Code Playgroud)
Pan*_*kis 12
你可以用at来做到这一点.您可以尝试以下简单示例:
const size_t N = 20;
std::vector<int> vec(N);
try {
vec.at(N - 1) = 7;
} catch (std::out_of_range ex) {
std::cout << ex.what() << std::endl;
}
assert(vec.at(N - 1) == 7);
Run Code Online (Sandbox Code Playgroud)
请注意,该方法at
返回一个allocator_type::reference
,这种情况是一个int&
.使用at
等同于分配值vec[i]=...
.
通过以下示例可以理解at
和插入之间存在差异:
const size_t N = 8;
std::vector<int> vec(N);
for (size_t i = 0; i<5; i++){
vec[i] = i + 1;
}
vec.insert(vec.begin()+2, 10);
Run Code Online (Sandbox Code Playgroud)
如果我们现在打印出来,vec
我们会得到:
1 2 10 3 4 5 0 0 0
Run Code Online (Sandbox Code Playgroud)
相反,如果我们做了vec.at(2) = 10
,或者vec[2]=10
,我们会得到
1 2 10 4 5 0 0 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
175576 次 |
最近记录: |