C++ 子向量修改原始向量
我想提取一个子向量。然后修改影响原始向量的元素。我的示例代码如下:C++ 子向量修改原始向量,c++,vector,stl,C++,Vector,Stl,我想提取一个子向量。然后修改影响原始向量的元素。我的示例代码如下: #include <vector> #include <iostream> using namespace std; void printvec(vector<int>& v){ for(int i = 0;i < v.size();i++) {cout << v[i] << " ";} cout << en
#include <vector>
#include <iostream>
using namespace std;
void printvec(vector<int>& v){
for(int i = 0;i < v.size();i++) {cout << v[i] << " ";}
cout << endl;
}
int main(){
vector<int> original;
for(int i = 1;i <= 10;i++) original.push_back(i);
printvec(original);
vector<int> subvector(original.begin()+4, original.end()-2);
subvector[0]=0;
subvector[1]=0;
printvec(subvector);
printvec(original);
return 0;
}
#包括
#包括
使用名称空间std;
无效打印向量(向量和v){
对于(inti=0;i
vector<int> subvector(original.begin()+4, original.end()-2);
如果不想使用指针,可以创建一个切片
类将工作转发到该类,该类将只是一对迭代器和可能需要的任何其他操作:
template <typename T>
class slice {
using iterator = typename T::iterator;
using reference = typename std::iterator_traits<iterator>::reference;
slice(iterator first, iterator last)
: first(first), last(last)
{ }
reference operator[](size_t idx)
{
return *std::next(first, idx);
}
iterator begin() const { return first; }
iterator end() const { return last; }
private:
iterator first, last;
};
int*subvector=original.begin()+4;
会起作用,尽管它肯定使用了指针。@dasblinkenlight:这也不会给你一个size()
函数;)
template <typename T>
class slice {
using iterator = typename T::iterator;
using reference = typename std::iterator_traits<iterator>::reference;
slice(iterator first, iterator last)
: first(first), last(last)
{ }
reference operator[](size_t idx)
{
return *std::next(first, idx);
}
iterator begin() const { return first; }
iterator end() const { return last; }
private:
iterator first, last;
};
slice<vector<int>> subvector(original.begin()+4, original.end()-2);
subvector[0]=0; // changes original[4]
subvector[1]=0; // changes original[5]
0 0 7 8