有没有办法通过使矢量重复来扩展矢量?
>v = [1 2];
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl
Run Code Online (Sandbox Code Playgroud)
然后v10将是:
>v10
1 2 1 2 1 2 1 2 1 2
Run Code Online (Sandbox Code Playgroud)
这应该适用于一般情况,而不仅仅是[1 2]
我有一个IInventory*的向量,我正在使用C++ 11范围循环遍历列表,以便对每个进行处理.
在做了一些东西之后,我可能想要从列表中删除它并删除对象.我知道我可以随时调用delete指针来清理它,但是在范围for循环中,从矢量中删除它的正确方法是什么?如果我从列表中删除它将使我的循环失效?
std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());
for (IInventory* index : inv)
{
// Do some stuff
// OK, I decided I need to remove this object from 'inv'...
}
Run Code Online (Sandbox Code Playgroud) 第23.3.7节vector<bool>[vector.bool]第1段规定:
template <class Allocator> class vector<bool, Allocator> {
public:
// types:
typedef bool const_reference;
...
Run Code Online (Sandbox Code Playgroud)
但是,当使用libc ++时,此程序无法编译:
#include <vector>
#include <type_traits>
int
main()
{
static_assert(std::is_same<std::vector<bool>::const_reference, bool>{}, "?");
}
Run Code Online (Sandbox Code Playgroud)
此外,我注意到C++标准在本规范中一直与C++ 98一致.我还注意到自从第一次引入libc ++以来,libc ++一直没有遵循这个规范.
这种不合格的动机是什么?
我正在尝试测试向量的所有元素是否彼此相等.我提出的解决方案似乎有点迂回,都涉及检查length().
x <- c(1, 2, 3, 4, 5, 6, 1) # FALSE
y <- rep(2, times = 7) # TRUE
Run Code Online (Sandbox Code Playgroud)
用unique():
length(unique(x)) == 1
length(unique(y)) == 1
Run Code Online (Sandbox Code Playgroud)
用rle():
length(rle(x)$values) == 1
length(rle(y)$values) == 1
Run Code Online (Sandbox Code Playgroud)
一个允许我包含容差值的解决方案,用于评估元素之间的"平等",这是避免FAQ 7.31问题的理想选择.
是否有我完全忽略的测试类型的内置函数?identical()并all.equal()比较两个R对象,因此它们在这里不起作用.
编辑1
以下是一些基准测试结果.使用代码:
library(rbenchmark)
John <- function() all( abs(x - mean(x)) < .Machine$double.eps ^ 0.5 )
DWin <- function() {diff(range(x)) < .Machine$double.eps ^ 0.5}
zero_range <- function() {
if (length(x) == 1) …Run Code Online (Sandbox Code Playgroud) 什么是一个转换的好干净的方式std::vector<int> intVec来std::vector<double> doubleVec.或者,更一般地说,转换两种可转换类型的向量?
如何在值为复制的向量中列出不同的值?我的意思是,类似于以下SQL语句:
SELECT DISTINCT product_code
FROM data
Run Code Online (Sandbox Code Playgroud) 正如(希望)我们都知道的那样,vector<bool>完全被打破,不能被视为交流阵列.获得此功能的最佳方法是什么?到目前为止,我所想到的想法是:
vector<char>替代,或vector<bool_wrapper>你们怎么处理这个问题?我需要c_array()功能.
作为一个附带问题,如果我不需要c_array()方法,如果我需要随机访问,解决此问题的最佳方法是什么?我应该使用双端队列还是别的什么?
编辑:
c_array()是专门的,所以每个bool需要1位.因此,您无法将其转换为C风格的数组.当然,由于可能的对齐问题,我必须读入my_bool :(
struct my_bool
{
bool the_bool;
};
vector<my_bool> haha_i_tricked_you;
Run Code Online (Sandbox Code Playgroud) 我正在使用一个外部库,它在某些时候给了我一个指向整数数组和大小的原始指针。
现在我想使用std::vector来访问和修改这些值,而不是使用原始指针访问它们。
这是一个解释这一点的人为示例:
size_t size = 0;
int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in
std::vector<int> v = ????; // pseudo vector to be used to access the raw data
std::sort(v.begin(), v.end()); // sort raw data in place
for (int i = 0; i < 5; i++)
{
std::cout << data[i] << "\n"; // display sorted raw data
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
原因是我需要<algorithm>在该数据上应用算法(排序、交换元素等)。
在另一方面改变这种载体的大小将永远不会改变,因此push_back, …
Scott Meyers的书第18项有效STL:50改进您对标准模板库的使用的具体方法说避免vector <bool>因为它不是STL容器而且它实际上并不存在bool.
以下代码:
vector <bool> v;
bool *pb =&v[0];
Run Code Online (Sandbox Code Playgroud)
不会编译,违反STL容器的要求.
错误:
cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
Run Code Online (Sandbox Code Playgroud)
bool返回类型应该是T&,但为什么它是特殊情况vector<T>::operator []?
什么是T&真正组成的呢?
该项目进一步说:
deque<bool> v; // is a STL container and it really contains bools
Run Code Online (Sandbox Code Playgroud)
这可以用作替代品vector<bool>吗?
有人可以解释一下吗?