c++ - 通过引用获取最后一个 vector 元素

标签 c++

我有以下代码将 vector 的一部分附加到另一个。

#include <algorithm>    // std::copy
#include <iostream>
#include <vector>
#include <cmath>
#include <assert.h>

using namespace std;

void copyVec(const std::vector<double> in, std::vector<double> &out, int start, unsigned int length) {
    assert(start>=0 && in.size()>=start+length);
    out.reserve(length);
    cout << in.at(9) << endl;
    out.insert(out.end(), &in.at(start), &in.at(start+length));
}

int main(int argc, char ** argv) {
    int start = 0;
    int end = 9;
    int window_size = 10;

    // initialize
    vector<double> vec1 = vector<double>(window_size);
    for (unsigned int i=0;i<window_size;++i) vec1[i] = i;
    vector<double> vec2 = vector<double>(window_size);
    for (unsigned int i=0;i<window_size;++i) vec2[i] = i*10;

    // print
    cout << "vec1: "; 
    for (unsigned int i=0;i<vec1.size();++i) cout << vec1[i] << " "; cout << endl;
    cout << "vec2: "; 
    for (unsigned int i=0;i<vec2.size();++i) cout << vec2[i] << " "; cout << endl;

    copyVec(vec1,vec2,start,end);

    // print
    cout << "vec2: "; for (unsigned int i=0;i<vec2.size();++i) cout << vec2[i] << " "; cout << endl;

    return 0;
}

我似乎无法通过引用访问 vec2 的最后一个元素。 此示例 (int end = 9) 的输出是

size: 10 start: 0 end: 9
vec1: 0 1 2 3 4 5 6 7 8 9 
vec2: 0 10 20 30 40 50 60 70 80 90 
in[9]: 9 &in[9]: 0x186d118
vec2: 0 10 20 30 40 50 60 70 80 90 0 1 2 3 4 5 6 7 8

当然,对于 int end = 10,我得到一个超出范围的错误:

size: 10 start: 0 end: 10
vec1: 0 1 2 3 4 5 6 7 8 9 
vec2: 0 10 20 30 40 50 60 70 80 90 
in[9]: 9 &in[9]: 0xae1118
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check
Aborted (core dumped)

那么我应该如何(有效地)附加最后一个 vector 元素?

最佳答案

您的插入应直接使用迭代器:

out.insert(out.end(), in.begin() + start, in.begin() + (start + length));

关于c++ - 通过引用获取最后一个 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204234/

相关文章:

c++ - 内存管理容器设计问题 - 项目需要继承

C++ 通过指针访问私有(private)函数

c++ - is_constexpr 在 C++11 中是否可行?

c++ - C++ 中的类型删除是什么?

c++ - 是否可以传递具有捕获的不可复制(移动)值的 lambda?

c++ - 如果 block 无法访问错误

c++ - 显式转换运算符 bool

c++ - 如何限制在 VS 设计器中创建的编辑框中的数字

c++ - 使用 Visual C++ 2013 Express 调试 64 位程序

c++ - 不同IPC机制的使用